Есть ли функция R, которая удаляет элемент списка и сохраняет все элементы в другом списке - PullRequest
2 голосов
/ 21 октября 2019

У меня есть 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 Ответ

2 голосов
/ 21 октября 2019

Мы можем использовать combn, чтобы создать все комбинации индексов, а затем использовать lapply, чтобы выбрать эти элементы для Train и удалить эти элементы из 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
...