gpt4 book ai didi

r - 如何使用 R 包 purrr 中的函数重现循环

转载 作者:行者123 更新时间:2023-12-04 09:11:10 26 4
gpt4 key购买 nike

我经常在我的代码中使用循环。有人告诉我,我应该使用函数而不是使用循环,并且可以使用 R 包 purr 中的函数重写循环。

作为示例,代码仅显示鸢尾花数据集中不同物种的计数,其中 Sepal.Width < 3

 library(dplyr)
#dataframe to put the output in
sepaltable <- data.frame(Species=character(),
Total=numeric(),
stringsAsFactors=FALSE)

#list of species to iterate over
specieslist<-unique(iris$Species)

#loop to populate the dataframe with the name of the species
#and the count of how many there were in the iris dataset

for (i in seq_along (specieslist)){
a<-paste(specieslist[i])
b<- filter(iris,`Species`==a & Sepal.Width <=3)
c<-nrow(b)
sepaltable[i,"Species"]<-a
sepaltable[i,"Total"]<-c
}

该循环使用每个物种的名称以及鸢尾花数据集中的物种数量填充可分隔数据框。我想在不使用循环的情况下使用 R 包 purrr 中的函数重现此循环的效果。有人可以帮忙吗?

最佳答案

我们可以通过dplyr

中逻辑表达式的 sum来分组
library(dplyr)
iris %>%
group_by(Species) %>%
summarise(Total = sum(Sepal.Width <=3))

或者如果需要purrr

library(purrr)
map_dfr(specieslist, ~iris %>%
summarise(Total = sum(Species == .x & Sepal.Width <=3),
Species = .x )) %>%
select(Species, Total)

注意:mapapply 系列函数 (lapply/sapply/vapply/rapply/mapply/Map/apply) 都是循环

关于r - 如何使用 R 包 purrr 中的函数重现循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58754249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com