列表输出转换为矩阵

时间:2017-10-07 21:40:25

标签: r

我正在为矩阵编写以下程序。

X< - 复制(3,rnorm(20))

center_apply< - function(x){

apply(x,2,function(y)y - mean(y))

}

centX< -center_apply(X)

ID< - matrix(0,20,20)

g1< -replicate(3,rnorm(20))

N < - 20

n&lt; - 4

HL&LT; -list()

ZETA&LT; -list()

for(j in seq(1,N,n)){

mm&lt; -j + n - 1

v&lt; - g1 [j:mm,]

设置&lt; - colSums(v)

M&lt; - ID [j:mm,]

AD&LT; -colSums(M)

PART&lt; - sweep(t(centX),2,AD,*

SEC&lt; - rowSums(PART)/ N

ZET&lt; - set - SEC

ZETA [[j]]&lt; - ZET%*%t(ZET)

if(j == 1){

HL[j]<-ZETA[1]  

}其他{

HL[[j]]<-ZETA[j]- HL[j-n]

}

}

HL [1]

HL [5]

这次针对HL[1],但其余的。我收到错误"non-numeric argument to binary operator"。 非常感谢你对此的帮助。

1 个答案:

答案 0 :(得分:0)

当我使用“[[”提取数值时,向我看来好像在提取子列表:

 else {
       HL[[j]]<-ZETA[[j]]- HL[[j-n]]; cat(str(ZETA)); cat(str(HL))
       }

如果R的“[”运算符的参数是一个列表,它总是返回一个列表值。值得阅读并重新阅读?Extract页面至少十次,并仔细关注每一段。这就是我现在得到的(尽管看起来有点奇怪):

> str(HL)
List of 17
 $ : num [1:3, 1:3] 0.0631 -0.3173 -0.5259 -0.3173 1.5962 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] 5.9151 -0.0913 3.6557 -0.0913 -1.5683 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] -4.31 -1.76 -7.33 -1.76 3.72 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] 4.61 2.47 7.42 2.47 -2 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] 0.00182 0.28352 -11.72707 0.28352 3.65242 ...
> HL[[5]]
           [,1]       [,2]      [,3]
[1,]  5.9151241 -0.0912828  3.655714
[2,] -0.0912828 -1.5683258 -2.859833
[3,]  3.6557136 -2.8598327 -2.747340