在教程示例中使用R中的Apply Function时出错

时间:2013-04-12 02:29:52

标签: r apply

我正在尝试学习如何使用apply函数,我遇到了这个教程:http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/这看起来简洁明了,但我马上就遇到了问题。他们为证明适用的第一个例子是:

> # create a matrix of 10 rows x 2 columns
> m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2)
> # mean of the rows
> apply(m, 1, mean)
 [1]  6  7  8  9 10 11 12 13 14 15

这看起来非常基本,但我想我会尝试一下。这是我的结果:

> # create a matrix of 10 rows x 2 columns
> m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2)
> # mean of the rows
> apply(m, 1, mean)
Error in FUN(newX[, i], ...) : unused argument(s) (newX[, i])

毋庸置疑,我迷失在这一个......

为了提供更多信息,我尝试了本教程中提供的另一个示例并获得了正确的结果。这种情况的不同之处在于函数在apply函数中具体说明:

apply(m, 1:2, function(x) x/2)
      [,1] [,2]
 [1,]  0.5  5.5
 [2,]  1.0  6.0
 [3,]  1.5  6.5
 [4,]  2.0  7.0
 [5,]  2.5  7.5
 [6,]  3.0  8.0
 [7,]  3.5  8.5
 [8,]  4.0  9.0
 [9,]  4.5  9.5
 [10,]  5.0 10.0

sessionInfo()输出如下:

R version 2.15.3 (2013-03-01)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_2.15.3

冲突输出(详情= TRUE)

$.GlobalEnv
[1] "edit" "mean"

$`package:utils`
[1] "edit"

$`package:methods`
[1] "body<-"    "kronecker"

$`package:base`
[1] "body<-"    "kronecker" "mean" 

1 个答案:

答案 0 :(得分:2)

正如其他人所认定的那样,可能是因为mean上存在冲突。当你调用任何东西(函数,对象)时,R会经过搜索路径直到找到它(如果没有找到,R会相应地抱怨):

> search()
[1] ".GlobalEnv"        "tools:RGUI"        "package:stats"    
[4] "package:graphics"  "package:grDevices" "package:utils"    
[7] "package:datasets"  "package:methods"   "Autoloads"        
[10] "package:base"

如果您对R很新,请注意,在创建函数时,除非另行指定,否则它通常会存在于".GlobalEnv"中。 R在进一步查看之前首先查看,因此明智地命名函数非常重要,以免与常见函数冲突(例如meanplotsummary)。

偶尔从干净的会话开始可能是一个好主意。在调试阶段,命名变量xy是相当常见的(为了方便起见而选择的名称而不是信息性......毕竟我们只是人类),这可能是出乎意料的问题。当你的工作空间相当拥挤时,冲突的可能性就会增加,所以(a)小心选择名字,(b)重新启动而不进行恢复将是我的建议。