r - 在 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 个数据帧。感谢所有帮助。
解决方案
当您使用时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
会更干净 - 但是我需要查看数据。