是否有R函数删除列表中的一个元素并将所有元素存储在另一个列表中

时间:2019-10-21 13:20:03

标签: r combinations permutation

我在列表中有3个数据集,我想使用测试数据和训练数据的所有组合来构建模型。例如:

  • 模型1:火车数据-1,2,测试数据-3
  • 模型2:火车数据-1,3,测试数据-2
  • 模型3:火车数据-2,3,测试数据-1

我现在使用的方法费力且不明智。这是一个示例,我的问题是,如何使该过程自动化?

Day1 <- data.frame(x = c(1,2,3))
Day2 <- data.frame(x = c(4,5,6))
Day3 <- data.frame(x = c(7,8,9))

Days <- list(Day1,Day2,Day3)

Test <- list()
Train <- list()

Train[[1]] <- bind_rows(Day1, Day2)
Test[[1]] <- Day3
Train[[2]] <- bind_rows(Day1,Day3)
Test[[2]] <- Day2
Train[[3]] <- bind_rows(Day2,Day3)
Test[[3]] <- Day1

1 个答案:

答案 0 :(得分:2)

我们可以使用combn创建所有索引组合,然后使用lapplyTrain选择那些元素,并从Test中删除那些元素。

train_inds <- combn(seq_along(Days), 2, simplify = FALSE)
Train <- lapply(train_inds, function(x) dplyr::bind_rows(Days[x]))
Test <- lapply(train_inds, function(x) dplyr::bind_rows(Days[-x]))

检查输出

Train
#[[1]]
#  x
#1 1
#2 2
#3 3
#4 4
#5 5
#6 6

#[[2]]
#  x
#1 1
#2 2
#3 3
#4 7
#5 8
#6 9

#[[3]]
#  x
#1 4
#2 5
#3 6
#4 7
#5 8
#6 9

Test
#[[1]]
#  x
#1 7
#2 8
#3 9

#[[2]]
#  x
#1 4
#2 5
#3 6

#[[3]]
#  x
#1 1
#2 2
#3 3