gpt4 book ai didi

r - 将 dplyr {{ }} 与函数内的聚合一起使用时出错

转载 作者:行者123 更新时间:2023-12-05 08:24:53 25 4
gpt4 key购买 nike

我正在尝试通过使用 dplyrs {{ }} 符号来选择要聚合的列,从而在函数内部使用聚合。

filter <- function(df, level) {
df <- aggregate(.~ {{level}}, data=df, FUN=sum)
return(df)
}

但是我得到了错误

Error in model.frame.default(formula = cbind(phylum, '12K1B.txt', '12K2B.txt',  :  
variable lengths differ (found for '{{ level }}')

我仔细检查了我的数据,没有缺失值或 NA 值,当我在函数外运行它时,一切都按预期工作,所以我不确定是什么导致了错误。

最佳答案

{{ }}tidyverse 语法,应该只在 tidyverse 动词中起作用。

如果我们想达到这样的效果

aggregate(. ~ Species, data = iris, sum)
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 250.3 171.4 73.1 12.3
2 versicolor 296.8 138.5 213.0 66.3
3 virginica 329.4 148.7 277.6 101.3

我们可以动态地创建一个公式,像这样像文本一样操作

aggregate_var <- function(df, level) {
level <- deparse(substitute(level))
aggregate(formula(paste(". ~", level)), data=df, FUN=sum)
}

aggregate_var(iris, Species)
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 250.3 171.4 73.1 12.3
2 versicolor 296.8 138.5 213.0 66.3
3 virginica 329.4 148.7 277.6 101.3

顺便说一句 - filter 是一个流行的函数名称,也许更详细的描述是有用的。另请注意,此处不需要显式 return 语句和对 df 的赋值。

关于r - 将 dplyr {{ }} 与函数内的聚合一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69998654/

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