我正在为矩阵编写以下程序。
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"
。
非常感谢你对此的帮助。
答案 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