2012-05-02 49 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()来识别这类事情。

相关问题