2016-06-29 29 views
-1

私はRが新しく、リストについてのいくつかのことを理解しようとしています。私は次のことを持っていると言う:リストと角括弧

n = c(2, 3, 5) 
s = c("aa", "bb", "cc", "dd", "ee") 
b = c(TRUE, FALSE, TRUE, FALSE, FALSE) 
x = list(n, s, b, 3) 

(私は、単一のブラケットを使用していますので)私は値の第2のリストを返すようにRを求めているので、私は(私が思う)以下のことを理解しています。

これは、単一の値を返すことになっている二重括弧を使用しているためわかりません。実際には、私はRがここに戻ってくるはずがないと思います。私は単一の値を求めていますが、オブジェクトの2番目のグループは別のリストです。

x[[2]] 
# [1] "aa" "bb" "cc" "dd" "ee" 
+0

@ ZheyuanLi - 私は見ました。 "[["は単一の要素を選択します。それでなぜ5つの要素を返すのでしょうか? –

+1

@RandyMinderこのリストはベクトルで構成されています。「リスト要素」はベクトルです。 '[['は単一のベクトルを返します。 '['は、ベクトルまたはベクトルの別のリストを返します。 –

答えて

4

正確な例がhereであるようですが、これはよくあるリストの例です。

本質的に、x[2]は、xの2番目の項目を含む長さ1のlistである「スライス」です。 x[[2]] xの2番目の項目です。これはclass(x[2])class(x[[2]])で確認できます。

プログラミングでは、リストを扱うときに単一の括弧を避け、ベクトル、配列、data.framesのために予約すると便利です。

-1

Xがリストのリストになっています。 xを実行しただけでは、すべての要素を取得する必要があり、x[[2]]の結果が意味をなさないはずです。

2番目のリストの最初の要素を取得するには、「オブジェクトxの2番目のリストの最初のオブジェクト」と言っているx[[2]][1]を試してください。

Rの別の便利なトリックは、オブジェクトの構造を示すstr(x)を使用することです(この場合はリストのタイプとその内容)。

+0

私はx [2]とx [2]がまったく同じものを返す理由は私の大きな混乱だと思います。彼らは異なる操作を実行します。 –

+0

@RandyMinder - あなたが持っている 'x''リストには、' list'sである4つの単一のサブ構造があります。 'x [2]]'は 'x 'に格納されている2番目の' list'に相当する**単一**サブ構造を選択します。 – thelatemail

+0

しかし、@RandyMinder、 'x [2]'と 'x [[2 ]] '同じことを返さない:1つは5つの文字のベクトル、1つは要素を持つリスト、その要素は5つの文字のベクトルです。このリストへのアクセスは[Inception](http://www.imdb.com/title/tt1375666/)に似ています: 'x [2]'は 'x [2] [1]'と同じです。 'x [ 2] [1] [1] [1] 'などであり、なぜリストと同様に起こるのかを知ることは非常に重要です。 – r2evans