我想创建一个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
中创建一个新列表。
答案 0 :(得分:0)
我有点困惑,但我认为您正在尝试创建df2$y
中df1$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]
}
}
}
注意:我自己回答了我的问题,因为我想通知我的问题已经解决了。我非常感谢您的所有意见和帮助。