web-dev-qa-db-ja.com

データフレームとRのリストの違いは何ですか?

Rの-​​dataframelistの違いは何ですか?どの場合に使用すべきですか?ループオーバーする方が簡単ですか?

正確な問題:最初に「a」、「b」、「c」などの3つの文字列要素を保存する必要があります。後でこれらのそれぞれについて、さらに3つの要素を追加する必要があります。たとえば、「a」の場合、「a1」、「a2」、「a3」を追加する必要があります。後で、ネストされたforループを使用してこれらの要素にアクセスする必要があります。

だから、私は最初に保存してから追加することができるデータフレームまたはリストまたは他のデータ型を使用するのに混乱しています(各列の種類)?

現在、「交換するアイテムの数が交換の長さの倍数ではない」などのエラーが表示されます

64
ShazSimple

この質問は、一部の人々が考えるほど愚かではありません。私は、その違いに苦しんでいる多くの人々と、どこで何を使うべきかを知っています。要約する :

リストは、Rで群を抜いて最も柔軟なデータ構造です。リストは、各要素のクラス、長さ、または構造に制限のない要素のコレクションとして見ることができます。注意する必要があるのは、2つの要素に同じ名前を付けないことだけです。それは多くの混乱を引き起こす可能性があり、Rはそのためのエラーを与えません:

> X <- list(a=1,b=2,a=3)
> X$a
[1] 1

データフレームもリストですが、いくつかの制限があります。

  • 2つの異なる変数に同じ名前を使用することはできません
  • データフレームのすべての要素はベクトルです
  • データフレームのすべての要素の長さは同じです。

これらの制限と結果の2次元構造により、データフレームはmimick行列の動作の一部になります。行を選択し、行に対して操作を実行できます。リストでは行が定義されていないため、リストではできません。

これはすべて、その2次元構造に適合するデータセットにはデータフレームを使用する必要があることを意味します。基本的に、列が変数と一致し、行が広い意味での単一の観測と一致するすべてのデータセットにデータフレームを使用します。他のすべての構造については、リストを使用する方法です。

ネスト構造が必要な場合は、リストを使用する必要があることに注意してください。リストの要素はリストそのものであるため、非常に柔軟な構造化オブジェクトを作成できます。

112
Joris Meys

例を見てください:sapplyの代わりにapplyを使用してクラスを取得する場合-

apply(iris,2,class) #  function elements are rows or columns
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
"character"  "character"  "character"  "character"  "character" 

sapply(iris,class) # function elements are variables
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
"numeric"    "numeric"    "numeric"    "numeric"     "factor" 
0
user5220347