Преобразуйте мой простой цикл for в функцию применения - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь охватить семью apply больше, но все еще возникают проблемы.Я в основном понимаю простые случаи с lapply (как показано ниже), но у меня возникают проблемы с более сложными apply функциями.

У меня есть функция цикла for, которая перебирает вложенный список и добавляет новый список подмножеств.Как я мог написать это, используя семейство функций apply?

mylist <- list(mtcars=mtcars, iris=iris)

mylist <- lapply(mylist,
 function(sub) list(data=sub))

for (i in head(seq_along(mylist))){
  mylist[[i]]$new <- mylist[[i]]$data[,c(1,4,5)]
}

, что дает:

> mylist$mtcars$new
                     mpg  hp drat
Mazda RX4           21.0 110 3.90
Mazda RX4 Wag       21.0 110 3.90
Datsun 710          22.8  93 3.85
Hornet 4 Drive      21.4 110 3.08

> mylist$iris$new

    Sepal.Length Petal.Width    Species
1            5.1         0.2     setosa
2            4.9         0.2     setosa
3            4.7         0.2     setosa
4            4.6         0.2     setosa

1 Ответ

0 голосов
/ 12 октября 2018

Для создания такого вложенного списка не нужны и усложняются вещи.Будьте проще: возьмите начальный список и создайте новый список для новых таблиц.

olds <- list(mtcars=mtcars, iris=iris)
news <- lapply(mylist, function(df) df[, c(1, 4, 5)])

В обоих списках есть общие имена фреймов данных ("mtcars" и "iris"), так что это легковыбрать из списка news и списка olds соответствующий фрейм данных друг для друга.

# access the new data frame from the old data frame `iris`
news[["iris"]] # news[["mtcars"]]
# returns the corresponding new data frame of the "iris" data frame.

# return original data frame
olds[["iris"]] # olds[["mtcars"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...