Rのベクターデータ型とリストデータ型の主な違いは何ですか?これら2つのデータ型を使用する(または使用しない)ことの利点または欠点は何ですか?
データ型のユースケースを示す例をご覧ください。
技術的にはareベクトルをリストしていますが、その用語を使用する人はほとんどいません。 「リスト」はいくつかのモードの1つで、他のモードは「論理」、「文字」、「数値」、「整数」です。あなたがベクトルと呼んでいるものは、厳密なRの用語では「アトミック」です。
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
リストは「再帰的」タイプですが、アトミックベクトルはそうではありません。
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
再帰的、アトミック、または次元属性(行列と配列)があるかどうかに応じて、異なる関数を使用してデータオブジェクトを処理します。ただし、さまざまなデータ構造の「利点と欠点」の議論がSOにとって十分に焦点を絞った質問であるかどうかはわかりません。トミーが言ったことに加えて、リストが任意の数の他のベクトルを保持できることに加えて、その構造を定義する次元属性を持つ特定のタイプのリストであるデータフレームの可用性があります。実際に折り畳まれたアトミックオブジェクトである行列や配列とは異なり、データフレームは因子タイプを含むさまざまなタイプを保持できます。
リストは「再帰的」です。これは、他のリストであっても、異なるタイプの値を含めることができることを意味します。
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のバックグラウンドから来た人として、ここに私が考えていることを示します。
list
は、実際には配列+ハッシュマップです。 PHP連想配列です。
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
vector
は固定タイプの配列/リストです。リンクリストのように考えてください。リンクリストに異なるアイテムを配置することは、とにかくアンチパターンであるためです。これは、SIMD/MMX /ベクトルユニットがWordを使用するのと同じ意味でのベクトルです。
これと同様の入門的な質問は http://www.burns-stat.com/pages/Tutor/hints_R_begin.html で回答されています
これは、できるだけ早くRを使用して実行できるようにする穏やかな紹介であることを意図しています。ある程度は成功します。
---編集:-
さらに説明する試み。上記の参照から引用。
原子ベクトル
遭遇する可能性のある原子ベクトルには3つの種類があります。
- 「数値」
- 「論理的」
- "キャラクター"
アトミックベクトルについて覚えておくべきことは、それらのすべての要素が1つのタイプのみであるということです。
リスト
リストには、さまざまなコンポーネントにさまざまなタイプのアイテムを含めることができます。リストのコンポーネントは、別のリスト、アトミックベクトル(およびその他のもの)にすることができます。
this リンクも参照してください。
ベクトル(1次元配列):数値、文字、または論理値を保持できます。ベクトルの要素はすべて同じデータ型です。
Rのリストは、職場や学校でのTo Doリストに似ています。そのリストのさまざまな項目は、長さ、特性、実行する必要のあるアクティビティのタイプが異なる可能性が高いです。
Rのlistを使用すると、さまざまなオブジェクトを1つの名前(つまり、リストの名前)で順番に収集できます。これらのオブジェクトは、マトリックス、ベクトル、データフレーム、その他のリストなどです。これらのオブジェクトが何らかの方法で相互に関連している必要はありません。
リストは、ある種のスーパーデータタイプであると言えます。リストには、実質的にあらゆる情報を格納できます。
リストを作成するには、関数list()を使用します。my_list <-list(comp1、comp2 ...)
リスト関数の引数はリストコンポーネントです。これらのコンポーネントは、マトリックス、ベクトル、他のリストなどであることに注意してください。
要約すると、リストとベクトルの主な違いは、Rのlistにより、1つの名前(つまり、リストの名前)でさまざまなオブジェクトを収集できることです。順序付けられた方法で。これらのオブジェクトは、マトリックス、ベクター、データフレーム、その他のリストなどです。これらのオブジェクトが何らかの方法で相互に関連している必要はありません...一方、ベクター allの要素同じデータ型を持ちます。
リストには、文字、数値、論理などの複数のデータ型が含まれます。ただし、ベクターには類似したタイプのデータのみが含まれます。例:
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.