2011-07-12 44 views
0

我在使用R中的數據表時遇到問題。這可能非常簡單,但我無法在任何地方找到解決方案。R數據表問題

以下是我有: 假設t是數據表

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

當我做到這一點,它打印NULL。但是,如果我手動執行,它工作正常 - 例如列名稱是「樣本」。如果我在R提示符中鍵入t $「sample」,它可以正常工作。我在這裏做錯了什麼?

回答

5

您需要t[[col]]; t$col做了一個奇怪的形式的評價。

編輯:包含@ joran的解釋:

t$col試圖找到列表t字面上名爲'col'一個元素,而不是你發生什麼事都存儲在一個名爲col變量的值。

  • $便於交互使用,因爲它是短,可以跳過引號(即t$foot[["foo"]],它也確實部分匹配,這是非常方便的,但可以在不尋常的情況是危險的或令人困惑的:即,如果列表中包含的元素foolicious,然後t$foo將檢索它對於這個原因,它是一般建議編程
  • [[可以採取兩種文字字符串("foo")或字符串。存儲在一個變量(col)中,並且不進行部分匹配。通常建議用於編程(儘管交互式使用它沒有任何壞處)。
+0

完美的作品,非常感謝你! – NSP

+0

您(或其他人)能否澄清原因?我在自己的工作中注意到類似於NSP的問題,並發現自己遷移到您提供的解決方案,但僅僅是因爲遇到了更少的問題。我不知道爲什麼會出現這種差異。 – Iterator

+3

@Iterator - 't $ col'試圖在't'中找到*字面名爲'col'*的東西,而不是你在一個名爲'col'的變量中存儲的值。如果't'是一個數據幀並且沒有名爲'col'的列,它將返回null。至於爲什麼,'$'和'[['只是不同的工具,應該在不同的環境下使用;每個都以他們自己的方式方便。 – joran