r - 在函数中使用 group_by
问题描述
我正在尝试使用dplyr
语法编写一个函数,其中包括在函数内部使用 group_by 进行分组。声明似乎有问题group_by
,我无法弄清楚有什么问题。abc
当我作为参数传递并select
在函数内部使用时,它会像我预期的那样工作(Gfunc1)。当尝试group_by
相同的论点时,它给了我一个错误;
错误:列
dims
未知
请参阅下面的示例。我真的希望我没有忽略一些令人尴尬的简单事情......无论如何,将不胜感激!
library(dplyr)
abc <- c("a","a","a","b","b","c")
num <- c(1,2,3,4,5,6)
df <- data.frame(abc,num)
Gfunc1 <- function(dims) {
test1 <- df %>%
select(dims)
assign("test1", test1, envir = .GlobalEnv)
}
Gfunc2 <- function(dims) {
test2 <- df %>%
group_by(dims)
assign("test2", test2, envir = .GlobalEnv)
}
Gfunc1("abc")
# Returns as expected; df test1 with only col = "abc"
Gfunc2("abc")
# Does not return what i expect; gives error: Error: Column `dims` is unknown
解决方案
{{}}
可以通过使用(我使用的是rlang
0.4.1、0.8.3 )来解决这个问题,dplyr
如下所示。
问题是在编写依赖于dplyr
. 这通常通过整洁的评估/非标准评估(NSE)来完成。我添加df
为参数是因为我觉得提供数据集作为参数总是比从外部环境调用它更好。与其他功能不同,为什么Gfunc1
有效是因为select
它更健壮:dplyr
Gfunc2 <- function(df = NULL,dims) {
test2 <- df %>%
group_by({{dims}})
assign("test2", test2, envir = .GlobalEnv)
}
对于早期版本的rlang
and dplyr
,同样可以使用sym
and实现!!
:
Gfunc2 <- function(df = NULL,dims) {
test2 <- df %>%
group_by(!!sym(dims))
assign("test2", test2, envir = .GlobalEnv)
}
Gfunc2(df,"abc")
笔记
- 将结果存储在列表中而不是将它们发送到
.GlobalEnv
.
推荐阅读
- maven - maven-archetype-plugin 因 ClassNotFoundException 而失败
- python - 如何让 pyinstaller 识别我的自定义导入?
- sql-server - 查看与查询不显示相同的结果
- python - predict_proba 不适用于我的高斯混合模型(sklearn,python)
- swift - tableview 单元格上的详细文本标签不使用倒数计时器刷新
- resharper - Resharper 在使用无扩展链接时抱怨“路径错误”
- google-cloud-platform - Python 包安装在 GCP 实例上,但当我通过 Jupiter Lab 启动笔记本时未显示
- c++ - 在 push_back() 之前保留非空 std::vector 的正确方法
- java - Gradle Multi Project - 在“jar”之前为每个 java 库项目应用“干净”任务
- git - 远程拒绝删除 git 远程分支