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

时间:2019-11-13 00:32:49

标签: r

我有2个变量,我需要使用这2个变量创建所有组合。我已经能够使用R combn函数实现这一目标,并最终将组合存储在嵌套列表中。现在,我需要对每种组合进行一些计算,并将组合的输出存储在一起。我正在尝试将输出存储在列表中,但是由于某种原因,无法以正确的方式生成输出列表。下面是示例代码:

''''
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
         }''''

我得到的输出是:

[[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”!任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

output_sublist for i = 1

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

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

对于i = 2,由于我们没有清除output_sublist,因此它仅替换第一个值,而第二个值保持不变。

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

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

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

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"