首页 > 解决方案 > 在 R 中从循环更改为函数 lapply

问题描述

我知道在 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 个数据帧。感谢所有帮助。

标签: rfunctionloopslapply

解决方案


当您使用时for (i in list_BG) i实际上是整个元素(data.frame),然后您尝试使用它i来创建您的 list 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会更干净 - 但是我需要查看数据。


推荐阅读