Rのベクターデータ型とリストデータ型の違いは何ですか?


127

Rのベクターデータ型とリストデータ型の主な違いは何ですか?これら2つのデータ型を使用する(または使用しない)ことの利点と欠点は何ですか?

データ型の使用例を示す例を見ていただければ幸いです。

回答:


77

技術的にはリストベクトルですが、その用語を使用する人はほとんどいません。"list"はいくつかのモードの1つであり、他のモードは "logical"、 "character"、 "numeric"、 "integer"です。あなたがベクターと呼んでいるものは、厳密なR用語では「アトミックベクター」です。

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE

リストは(ベクトルの)「再帰」タイプですが、アトミックベクトルはそうではありません。

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

再帰的、アトミック、または次元属性(行列と配列)があるかどうかに応じて、さまざまな関数でデータオブジェクトを処理します。ただし、さまざまなデータ構造の「メリットとデメリット」の説明がSOにとって十分に焦点を当てた質問であるかどうかはわかりません。トミーの発言に加えて、リストが他の任意の数のベクトルを保持できるリストに加えて、その構造を定義する次元属性を持つ特定のタイプのリストであるデータフレームが利用可能です。本当に折り畳まれたアトミックオブジェクトである行列や配列とは異なり、データフレームは因子型を含むさまざまな型を保持できます。

名前以外の属性がある場合にis.vector関数が返す警告もありFALSEます。参照:ベクトルとは?


54

リストは「再帰的」です。これは、他のリストでさえ、それらが異なるタイプの値を含むことができることを意味します:

x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values   # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo  # Get sub elements
x[[c(3,2)]]  # Another way (gets 13)
str(x)     # A "summary" of the list's content

リストはRでデータセットを表すために使用されます。 data.frameクラスは基本的に、各要素が特定のタイプの列であるリストです。

もう1つの使用法は、モデルを表すlm場合です。からの結果は、一連の有用なオブジェクトを含むリストを返します。

d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)

m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)

すべての要素が同じ型であることがわかっているので、原子ベクトル(リストではないが数値、論理値、文字)は便利です。これにより、操作が非常に速くなります。


20

Rに入ったばかりで、C / Java / Ruby / PHP / Pythonのバックグラウンドを持っている人として、私は次のように考えています。

A listは実際には配列+ハッシュマップです。これは、PHPの連想配列です。

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

A vectorは固定タイプの配列/リストです。リンクされたリストのように考えてください。異なるリストのアイテムをリンクされたリストに入れることは、とにかくアンチパターンだからです。SIMD / MMX /ベクトル単位が単語を使用するのと同じ意味でのベクトルです。


3
メソッドkeyを使用して、ベクトルにを含めることができますnames
gokul_uf 2017

9

これと同様の導入質問はhttp://www.burns-stat.com/pages/Tutor/hints_R_begin.htmlで回答されています

これは、Rをできるだけ早く使用できるようにするための、穏やかな導入を目的としています。ある程度成功します。

---編集:-

さらに説明する試み; 上記参考資料より引用。

原子ベクトル

あなたが遭遇する可能性が高い3種類の原子ベクトルがあります:

  • 「数値」
  • 「論理的」
  • "キャラクター"

原子ベクトルについて覚えておくべきことは、それらのすべての要素は1つのタイプのみであることです。

リスト

リストには、さまざまなコンポーネントにさまざまなタイプのアイテムを含めることができます。リストのコンポーネントは、別のリスト、アトミックベクトル(およびその他のもの)にすることができます。

こちらのリンクもご覧ください。


2
反対投票:少なくとも、元の質問に回答するそのWebサイトの特定のセクションを参照する必要があります。
nbro 2018年

2

リストには、文字、数値、論理などの複数のデータ型が含まれます。しかし、ベクトルには同様のタイプのデータのみが含まれます。例:

scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)

リスト:

mylist <- list(scores,student,sc_log)
# search for class of mylist vector 
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE

これは、mylistに数値、文字、論理などの複数のデータ型を含むリストを意味しますが、ベクトルでは、そのベクトルのすべての要素の単一のデータ型が存在します

例:

ベクトルの場合:

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"

#which means all elements of vector containing single data type that is numeric only.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.