强制“申请”返回矩阵?

时间:2015-10-30 07:14:47

标签: r

假设我有一个数据矩阵,我想先按行对中心矩阵,然后按列计算均值。

a=matrix(runif(50),nrow=5)
a1=apply(a,1,function(x)x-mean(x))
a.sum=apply(a1,1,sum)

a包含多个列时,此方法很有效。但是,有时输入只有一列,这将导致麻烦:

a=matrix(runif(5))
a1=apply(a,1,function(x)x-mean(x))
a.sum=apply(a1,1,sum)
Error in apply(a1, 1, sum) : dim(X) must have a positive length

这是因为第一个apply返回了一个向量,而不是一个矩阵。 R自动删除维度。那么有一种聪明的方法来阻止这种情况吗?我知道我可以使用if来检测a的维度,并使用不同的编码来处理它。但这似乎有点尴尬。

1 个答案:

答案 0 :(得分:1)

告诉 R 它是一个矩阵:

a=matrix(runif(5))
#          [,1]
#[1,] 0.0103764
#[2,] 0.9738857
#[3,] 0.2845688
#[4,] 0.7050949
#[5,] 0.3000554

a1=as.matrix(apply(a,1,function(x)x-mean(x)))
#     [,1]
#[1,]    0
#[2,]    0
#[3,]    0
#[4,]    0
#[5,]    0

a.sum=apply(a1,1,sum)
#[1] 0 0 0 0 0