2012-05-02 46 views
0

我收到的時候我嘗試使用str功能R.
這裏的錯誤數據:錯誤使用上data.frame海峽

> dput(data1) 
data1<- structure(list(Year = 1990:2010, Counts = c(1401L, 1290L, 1168L,1260L, 1252L, 1381L, 1330L, 1275L, 1235L, 1248L, 1237L, 1206L, 1175L, 1172L, 1055L, 1030L, 1002L, 987L, 915L, 806L, 868L)), .Names = c("Year", "Counts"), class = "data.frame", row.names = c(NA, -21L)) 

我不知道爲什麼R的給我與str以下錯誤,而class函數明確表示data1是data.frame

> class(data1) 
[1] "data.frame" 
> str(data1) 
Error in str(data1) : 
    unable to find a non-generic version of function "str" 

我對Windows使用R版本2.15.0(2012-03-30)。

任何幫助將不勝感激。

編輯: 隨着乾淨的R會話它的工作。但爲什麼會出現這種問題呢?是否有可能知道這一點?

+0

我也在Windows上使用R 2.15,它適用於我。你有沒有嘗試一個乾淨的R會議? – Sophia

+0

我沒有收到錯誤消息。我複製並粘貼了你的data1,並沒有使用dput語句。 –

+0

Thanks @MarkMiller請看我的編輯 –

回答

4

好的,我會咬人的。

爲什麼會出現這種問題?

對象(即函數,變量)掩碼是R代碼中最常見的錯誤或錯誤之一。爲什麼會發生?

嗯,有位於?Reserved的保留字R中的解析器列表:

R中的解析器保留字是:

ifelserepeatwhilefunctionforinnextbreak

TRUEFALSENULLInfNANaNNA_integer_NA_real_NA_complex_ NA_character_

.....1..2等等,其被用於指從封閉函數向下傳遞 參數。

這意味着你,用戶,不能重新分配這些名稱的值。但幾乎其他任何東西(假設它的語法有效)都在限制範圍內。

例如,data實際上是在utils的包,這就是爲什麼人們通常建議不要命名您的數據幀data的功能。您將屏蔽掉函數data,並且依賴它的任何代碼都會窒息。

老實說,我通常使用df作爲數據幀,即使這是一個計算F分佈的分佈函數的函數。 (我不需要F分配功能,但我仍然不應該那樣做。)這個問題的

特別狡猾的例子爲R用戶之間關於制定共同的笑話:

T <- FALSE 
F <- TRUE 

很多人是懶惰和使用TFTRUEFALSE,現在我們清楚地看到爲什麼這個是真的,真的是不好主意。 (很可能有人會給TF分配一些其他值。)

事實上,無論何時加載程序包,您都可能看到一堆警告,其中R通過加載軟件包你剛剛屏蔽了一堆功能,因爲它們具有通用名稱。

我怎麼知道這件事發生了?

這很容易。正如Ben在評論中所說的那樣,您使用conflicts()來識別這類事情。

相關問題