我有一个关于 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 指出的那样, colMeans
的 x
参数(来自 ?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/