2011-07-12 11 views
0

Rのデータテーブルの操作に問題があります。これはおそらく単純なものですが、どこでも解決策を見つけることができません。 のは、tは、データテーブルRデータテーブルの問題

colNames <- names(t) 
for (col in colNames) { 
    print (t$col) 
} 

私はこれを行うと、それはNULL印刷しているとしましょう。ここでは

は私が持っているものです。しかし、私が手動で行うと、うまくいきます - カラム名が "sample"であるとします。 Rプロンプトにt $ "sample"と入力すると、うまく動作します。私はここで間違って何をしていますか?

答えて

5

t[[col]]が必要です。 t$colは奇妙な評価をします。

編集:@のjoranの説明を組み込む:

t$colあなたはcolという名前の変数に値として格納されているために起こるものを、文字通りリストt'col'という名前の要素を見つけることではないしようとします。

  • $それは短く、1は引用符(すなわちt$foot[["foo"]]をスキップすることができますので、対話的に使用するのに便利です。それはまた、非常に便利ですが、異常な状況の下で危険なことができ部分一致を行いますか混乱:リスト要素fooliciousが含まれている場合、すなわち、そのt$fooはそれを取得します。このような理由から、それは一般的なプログラミングのために推奨さないある
  • [[は、文字列リテラル("foo")または文字列のいずれかを取ることができます。変数(col)に格納され、部分一致はしません。これは一般的にはプログラミングに推奨されます(ただし、対話的に使用することには問題ありません)。
+0

は本当にありがとうございます! – NSP

+0

あなた(または他の人)が原因を明確にすることはできますか?自分の仕事でNSPの質問に似た何かに気付き、あなたが与えた解決策に移行していることが分かりましたが、問題が少なくなったからです。なぜこの違いが起こるのか分かりません。 – Iterator

+3

@Iterator - 't $ col'は、文字通り' col '*という名前のものを 't'で見つけようとしますが、' col'という名前の変数に値として格納されていません。 't'がデータフレームで、 'col'という名前の列を持たない場合、nullを返します。理由については、 '$'と '[' 'はちょうど異なるツールであり、異なる状況で使用する必要があります。それぞれ独自の方法で便利です。 – joran

関連する問題