0

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

> 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而 whileclass函数清楚地表明 data1 是 a 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 会话,它起作用了。但是为什么会出现这种问题呢?这有可能知道吗?

4

1 回答 1

4

好的,我会咬的。

为什么会出现这种问题?

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

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

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

很多人都很懒惰并使用Tand Ffor TRUEand FALSE,现在我们明白为什么这是一个非常非常糟糕的主意了。(很可能有人会为Tor分配其他值F。)

事实上,任何时候你加载一个包,你都可能会看到一堆警告,其中 R 告诉你,通过加载那个包,你只是掩盖了一堆函数,因为它们有共同的名字。

我怎么知道这已经发生了?

这要容易得多。正如本在评论中所说,您使用conflicts().

于 2012-05-03T00:05:28.750 回答