6

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

> # 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" 
4

1 回答 1

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 在继续之前先查看那里,因此明智地命名您的函数非常重要,以免与常用函数(例如mean, plot, summary)发生冲突。

偶尔从干净的会话开始可能是个好主意。在调试阶段命名变量xy(为了方便而不是提供信息而选择名称......毕竟我们只是人类)是相当普遍的,这可能会出乎意料地出现问题。当您的工作区相当拥挤时,发生冲突的可能性会增加,因此(a)仔细选择名称和(b)重新启动而不恢复将是我的建议。

于 2013-04-14T02:16:31.333 回答