回答:
技術的にはリストはベクトルですが、その用語を使用する人はほとんどいません。"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
ます。参照:ベクトルとは?
リストは「再帰的」です。これは、他のリストでさえ、それらが異なるタイプの値を含むことができることを意味します:
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)
すべての要素が同じ型であることがわかっているので、原子ベクトル(リストではないが数値、論理値、文字)は便利です。これにより、操作が非常に速くなります。
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 /ベクトル単位が単語を使用するのと同じ意味でのベクトルです。
これと同様の導入質問はhttp://www.burns-stat.com/pages/Tutor/hints_R_begin.htmlで回答されています
これは、Rをできるだけ早く使用できるようにするための、穏やかな導入を目的としています。ある程度成功します。
---編集:-
さらに説明する試み; 上記参考資料より引用。
原子ベクトル
あなたが遭遇する可能性が高い3種類の原子ベクトルがあります:
- 「数値」
- 「論理的」
- "キャラクター"
原子ベクトルについて覚えておくべきことは、それらのすべての要素は1つのタイプのみであることです。
リスト
リストには、さまざまなコンポーネントにさまざまなタイプのアイテムを含めることができます。リストのコンポーネントは、別のリスト、アトミックベクトル(およびその他のもの)にすることができます。
こちらのリンクもご覧ください。
リストには、文字、数値、論理などの複数のデータ型が含まれます。しかし、ベクトルには同様のタイプのデータのみが含まれます。例:
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.
key
を使用して、ベクトルにを含めることができますnames
。