在for循环中创建一个长度不同的List

时间:2016-07-29 15:04:46

标签: r

我想创建一个List,每次for loop运行时都会发生变化。实际上,新的list长度取决于现有List的长度。以下是我的大型代码的一小部分:

for (i in 1:length(df1$x)) {
   for (j in 1:length(df2$y[[i]])) {

     if (df1$x[i] == df2$y[[i]][j]) {

     }

   }
}

在代码中,df2$y是我的列表,我的第二个for loop长度基于我的df2$y列表的长度。基本上,我正在访问df2$y列表中的元素并与df1$x进行比较。所以,If condition遇到了我想将该列表元素保存到新创建的列表中。列表的长度很大。因此,许多列表元素将满足条件。因此,我需要在for loop中创建一个新列表。

2 个答案:

答案 0 :(得分:0)

我有点困惑,但我认为您正在尝试创建df2$ydf1$x中每个元素的新列表。如果是这种情况,您可以利用矢量化代码:

df1 <- list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
df2 <- list(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 7, 8, 10, 22, 23, 4, 5, 3, 10)

#Create a list with 15 elements
df3 <- y[y %in% x]

答案 1 :(得分:0)

感谢您的所有评论。所以,我自己解决了我的问题,我意识到这是微不足道的。在我的回答中,我最初使用fixed创建了一个新列表newList,我知道这对于内存的预分配很重要,以减少计算时间。然后,当遇到newList时,我使用[[]][]将新元素保存到if condition。以下是我的方法,对我来说很有效:

newList <- vector("list", N)
for (i in 1:length(df1$x)) {
   for (j in 1:length(df2$y[[i]])) {

     if (df1$x[i] == df2$y[[i]][j]) {

        newList[[i]][j] <- df2$z[j]

     }

  }
}

注意:我自己回答了我的问题,因为我想通知我的问题已经解决了。我非常感谢您的所有意见和帮助。