例如,我想初始化一个向量和矩阵列表,但向量和矩阵是随机维度的。例如,假设我想要初始化的列表是“y”,我想做类似这样的事情
for(i in 1:10){
len = round(100*runif(1))
if(runif(1)<.5){
y[i] = runif(len);
} else {
y[i] = matrix(0,len,len);
}
我已经阅读过关于列表的文档,但仍然无法解决这个问题。 This question和其他一些人讨论初始化列表,但不知道列表元素的维度未知的地方。
这是第二个例子
for(i in 1:10){
if(runif(1)<.5){
len = round(100*runif(1))
y[i] = runif(len);
q[i] = matrix( rexp(len*len,1), len, len);
} else {
len = round(90*runif(1))
y[i] = matrix(0,len,len);
q[i] = matrix( rexp(len*len,1), len, len);
}
答案 0 :(得分:3)
如果迭代之间没有任何关系,请避免使用。
在这里使用replicate
,它会为您创建正确的结构:
set.seed(123)
replicate(3,{ ## replacee 3 by 10
len = round(4*runif(1)) ## replace 4 by 100
if(runif(1)<.5) runif(len)
else matrix(0,len,len)
})
[[1]]
[,1]
[1,] 0
[[2]]
[,1] [,2]
[1,] 0 0
[2,] 0 0
[[3]]
[1] 0.5281055 0.8924190 0.5514350 0.4566147