如何初始化列表,列表中的元素类型未知

时间:2014-01-02 23:45:59

标签: r

例如,我想初始化一个向量和矩阵列表,但向量和矩阵是随机维度的。例如,假设我想要初始化的列表是“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);
}

1 个答案:

答案 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