如何使用宽限在列表中追加向量

时间:2014-02-03 10:47:54

标签: r

我在列表中附加了一个向量。该条目相继增长。

li <- list()
for(i in 1:10)
{
  v <- runif(2)
  if(i==1)
  {
    li[[1]] <- v
  } else {
    li[[1]] <- append(li[[1]],v)
  }
}

我很难看到两种情况需要不同的代码1)li[[1]]不存在且2)li[[1]]存在。任何解决方案?

背景: 你不能用向量来初始化一个列表元素:

v <- NULL
v <- append(v,c(1,2,3))

作品

li <- list()
li[[1]] <- NULL
li[[1]] <- append(li[[1]],c(1,2,3))

引发错误,因为li[[1]]无法初始化li[[1]] <- NULL

更新:我了解到这将适用于命名列表(这也增加了一些优雅),但可能存在(动态)情况,命名不是一个好的选择。

2 个答案:

答案 0 :(得分:1)

我不确定你在这里需要loop。但是您可以预先分配列表以避免处理空列表。您可以使用vector进行分配:

n <- 10
li <- vector('list',n)

然后你只需分配每个元素:

for(i in 1:10) {
  v <- runif(sample(n,1)) ## I choose a dynamic length here 
                          ## otherwise the example don't make sense
  li[[i]] <- v
}

答案 1 :(得分:0)

初始化列表元素的正确方法是:

li <- list(NULL)
for(i in 1:10)
{
  v <- runif(2)
  li[[1]] <- append(li[[1]],v)
}

由于