我有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”!任何帮助将不胜感激。提前谢谢。
答案 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"