1

我想按列计算矩阵的系数和相关 p 值的成对组合。

这里我使用了两个函数:

allCoef<- function(Y,X) {  lm(Y~X+0)$coef }
allCorr.p<- function(Y,X) {  cor.test(Y,X)$p.value }

例如,我有一个 A 矩阵:

A= matrix(sample(1:100,16),4,4)
apply(Y=A,2,allCoef,X=A)

工作正常。

apply(Y=A,2,allCorr.p,X=A)

但是,显示错误cor.test.default(Y, X) : 'x' and 'y' must have the same length。有人可以告诉我我在这里做错了什么吗?我使用的是相同的矩阵,所以列的长度应该相同。

4

1 回答 1

4

您可以使用该函数生成列比较的所有组合,然后使用以下的列组合combn应用于此矩阵(假设 A 在您的全局环境中可用):cor.testA

# All combinations of pairwise comparisons
cols <- t( combn(1:4,2) )
apply( cols , 1 , function(x) cor.test( A[,x[1] ] , A[ , x[2] ] )$p.value )
#[1] 0.9893876 0.9844555 0.5461623 0.7987615 0.7414658 0.1061751

combn函数生成的列的成对组合是:

     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    2    3
[5,]    2    4
[6,]    3    4

apply(Y=A,2,allCorr.p,X=A)没有按预期工作,因为(忽略您不需要使用Y=A)您将整个矩阵作为第二个参数传递给您的函数,因此X实际上具有矩阵中所有列的长度。

于 2013-06-09T20:45:27.997 回答