繁体   English   中英

在嵌套 for 循环中处理嵌套列表

[英]Processing nested lists in nested for loop

我有 2 个变量,我需要使用这 2 个变量创建所有组合。 我已经能够使用 R 组合 function 来实现这一点,最后将组合存储在嵌套列表中。 现在我需要为每个组合运行一些计算并将组合的 output 存储在一起。 我正在尝试将 output 存储在列表中,但由于某种原因,没有以正确的方式生成 output 列表。 下面是一个示例代码:

''''
input_variables <- c("a","b") 
         output_sublist <- list() 
         output_biglist <- list()
         input_combination_list <- list()

         for (i in 1:length(input_variables)) {
           input_combination_list[[i]] <- combn(input_variables, i, simplify = FALSE)
           for(j in 1:length(input_combination_list[[i]]))  {
             input_combination_list[[i]][[j]]
             output_sublist[[j]] <-  input_combination_list[[i]][[j]]
           }
           output_biglist[[i]] <- output_sublist
         }''''

我得到的 output 是:

[[1]]
[[1]][[1]]
[1] "a"

[[1]][[2]]
[1] "b"


[[2]]
[[2]][[1]]
[1] "a" "b"

[[2]][[2]]
[1] "b"

我想要的是:

[[1]]
[[1]][[1]]
[1] "a"

[[1]][[2]]
[1] "b"


[[2]]
[[2]][[1]]
[1] "a" "b"

我不确定为什么最后会有一个额外的“b”。任何帮助将不胜感激。 提前非常感谢。

i = 1output_sublist

#[[1]]
#[1] "a"

#[[2]]
#[1] "b"

对于i = 2 ,因为我们不清除output_sublist它只替换第一个值,第二个值保持原样。

#[[1]]
#[1] "a" "b"

#[[2]]
#[1] "b"

您需要在i的每次迭代后清除output_sublist

for (i in 1:length(input_variables)) {
   output_sublist <- list() #Added a line here to clear output_sublist
   input_combination_list[[i]] <- combn(input_variables, i, simplify = FALSE)
   for(j in 1:length(input_combination_list[[i]]))  {
      input_combination_list[[i]][[j]]
      output_sublist[[j]] <-  input_combination_list[[i]][[j]]
    }
    output_biglist[[i]] <- output_sublist
}

output_biglist
#[[1]]
#[[1]][[1]]
#[1] "a"

#[[1]][[2]]
#[1] "b"


#[[2]]
#[[2]][[1]]
#[1] "a" "b"

但是,正如评论中提到的,我们也可以使用lapply来做到这一点

lapply(seq_along(input_variables), function(x) 
         combn(input_variables, x, simplify = FALSE))

#[[1]]
#[[1]][[1]]
#[1] "a"

#[[1]][[2]]
#[1] "b"


#[[2]]
#[[2]][[1]]
#[1] "a" "b"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM