gpt4 book ai didi

r - 将参数传递给 dplyr 函数

转载 作者:行者123 更新时间:2023-12-04 11:24:58 32 4
gpt4 key购买 nike

我想使用 dplyr 参数化以下计算找出 Sepal.Length 的哪些值与多个 Sepal.Width 的值相关联:

library(dplyr)

iris %>%
group_by(Sepal.Length) %>%
summarise(n.uniq=n_distinct(Sepal.Width)) %>%
filter(n.uniq > 1)

通常我会写这样的东西:
not.uniq.per.group <- function(data, group.var, uniq.var) {
iris %>%
group_by(group.var) %>%
summarise(n.uniq=n_distinct(uniq.var)) %>%
filter(n.uniq > 1)
}

但是,这种方法会引发错误,因为 dplyr用途 non-standard evaluation .这个函数应该怎么写?

最佳答案

您需要使用 dplyr 的标准评估版本。函数(只需将 '_' 附加到函数名称,即 group_by_ & summarise_ )并将字符串传递给您的函数,然后您需要将其转换为符号。要参数化 summarise_ 的参数,您需要使用 interp() ,在 lazyeval 中定义包裹。具体来说:

library(dplyr)
library(lazyeval)

not.uniq.per.group <- function(df, grp.var, uniq.var) {
df %>%
group_by_(grp.var) %>%
summarise_( n_uniq=interp(~n_distinct(v), v=as.name(uniq.var)) ) %>%
filter(n_uniq > 1)
}

not.uniq.per.group(iris, "Sepal.Length", "Sepal.Width")

请注意,在 dplyr 的最新版本中dplyr 函数的标准评估版本是 "soft deprecated"赞成非标准评价。

Programming with dplyr vignette有关使用非标准评估的更多信息。

关于r - 将参数传递给 dplyr 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32138666/

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