我有一个关于 colMeans 函数的问题。是否有这样的版本在遇到长度为 1 的列时不会返回错误?例如

temp<-cbind(c(2,2),c(3,4))
colMeans(temp)

[1] 2.0 3.5

但是对于这个
temp2<-c(2,2)
colMeans(temp2)

Error in colMeans(temp2) :
'x' must be an array of at least two dimensions

但是,如果我将函数 mean 应用于每一列,它会正确地得出 2 和 2 的值。

我写了一个函数来做到这一点
testfun<-function(i,x){
mean(x[,i])
}
sapply(1:ncol(x),testfun,x)

这给出了与 colMeans 相同的结果。
我听说 colMeans 应该比这种方法快得多。那么,当我的列的大小为 1 时,是否有一个 colMeans 版本可以工作。

最佳答案

正如@Paul 指出的那样, colMeansx 参数(来自 ?colMeans )需要“一个二维或更多维的数组”。但是 temp2 不是数组

is.array(temp2)
# [1] FALSE
temp2 可以做成一个数组:
(tempArray <- array(temp2, dim = c(1, 2)))
#      [,1] [,2]
# [1,]    2    2

colMeans(tempArray)
# [1] 2 2

也许 temp2 来自对数组进行子集化,例如
array(temp2, dim = c(2, 2))[1, ]

但这不是数组。要将其保留为数组,请在方括号内添加 drop = FALSE:
array(temp2, dim = c(2, 2))[1, , drop = FALSE]
#      [,1] [,2]
# [1,]    2    2

然后你可以在子集数组上使用 colMeans 。

关于r - R 中的 colMeans 函数并遇到大小为 1 的列的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10615214/

10-12 21:37