在data.frame上使用str时出错

时间:2012-05-02 19:52:04

标签: r

当我尝试在R中使用str函数时出现错误。
这是数据:

> 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会话,它起作用了。但为什么会出现这种问题呢?有可能知道这个吗?

1 个答案:

答案 0 :(得分:4)

好的,我会咬人。

为什么会出现这种问题?

对象(即函数,变量)掩码是R代码中最常见的错误或错误源之一。为什么会发生这种情况?

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

  

R解析器中的保留字是:

     

if else repeat while function for in next break

     

TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_   NA_character_

     

.....1..2等,用于引用传递的参数   来自封闭的功能。

这意味着您(用户)无法重新分配这些名称的值。但几乎任何其他东西(假设它的语法有效)都在界限内。

例如,data实际上是 utils 包中的一个函数,这就是人们通常建议不要命名数据框data的原因。您将屏蔽函数 data,任何依赖它的代码都会被阻塞。

老实说,我通常使用df作为数据框,即使这是一个计算F分布的分布函数的函数。 (我不需要F分配函数。但我仍然不应该这样做。)

这个问题的一个特别狡猾的例子是R用户关于设置的常见笑话:

T <- FALSE
F <- TRUE

很多人都很懒惰,并且对TF使用TRUEFALSE,现在我们确切地知道为什么这是真的,真的T或F分配一些其他价值。)

事实上,无论何时加载软件包,您都可能会看到一堆警告,其中R告诉您通过加载该软件包,您只是掩盖了一堆函数,因为它们具有通用名称。

我怎么知道发生了这种情况?

这更容易。正如Ben在评论中所说,你使用conflicts()确定了这种事情。