Переход от цикла к функции в R lapply - PullRequest
0 голосов
/ 23 мая 2018

Я понимаю, что использование циклов в R не лучшая практика.Я часто не могу заставить их работать.У меня есть список фреймов данных, которые я должен сделать повторяющуюся задачу.

Это список

  list_BG<- list(Education,Exp_intensity,Software_skills,Specialized,Common_Skills)

Пока что я выполнил задачу вручную

пример 1:

 Education_sum <-Education %>% 
   mutate(ANZSCO4_CODE = as.numeric(substr(ANZSCO4_CODE, 1, 3)))%>%
   group_by(ANZSCO4_CODE) %>%
   summarise_all(funs(mean))

Затем я попробовалцикл и ошибка

 for (i in list_BG) {
   Gen[[i]]<- i %>% 
     mutate(ANZSCO4_CODE = as.numeric(substr(ANZSCO4_CODE, 1, 3)))%>%
     group_by(ANZSCO4_CODE) %>%
     summarise_all(funs(mean))

}

Тогда возникает вопрос;почему мой цикл не работает и, во-вторых, как я могу превратить этот цикл в функцию, чтобы создать 5 фреймов данных, которые я пытаюсь создать.Вся помощь приветствуется.

1 Ответ

0 голосов
/ 23 мая 2018

Когда вы используете for (i in list_BG) i на самом деле весь элемент (data.frame), а затем вы пытаетесь использовать тот же i для создания списка Gen.

Вы должныиспользуйте seq_along для создания индекса для итерации следующим образом:

# data
df_list <- split(iris, iris$Species)

# using a for loop with seq_along
ans1 <- list()
for (i in seq_along(df_list)) {
  ans1[[i]] <- df_list[[i]] 
  # additional processing goes here
}

# using lapply, does not require any index in this case
ans2 <- lapply(df_list, function(x) {
  x
  # additional processing goes here
})

Вместо этого вы можете использовать purrr::map(), но я также подозреваю, что комбинация dplyr::bind_rows и обновление вашего group_by будет чище -Однако мне нужно увидеть данные.

...