首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >此函数(R)有什么问题(初学者)

此函数(R)有什么问题(初学者)
EN

Stack Overflow用户
提问于 2020-06-27 06:14:45
回答 2查看 52关注 0票数 1

我正在尝试创建一个函数,该函数自动在具有感兴趣的列(y)的特定数据帧(x)上执行dplyr的group_by和summarize命令。我写的代码是:

代码语言:javascript
代码运行次数:0
运行
复制
    mysummary <– function(x, y){
                     k = x %>%           
                           group_by(x$y) %>%
                           summarize(col.name = mean(var.name))
                     return(k)
                  }

这要么根本不起作用(如果我只是在group_by函数中使用y作为参数,说明没有名为y的列),要么使用上面的当前代码返回一个相同的tibble,而不管我按什么分组(在这种情况下,它总是按dataset中的变量year分组,而不管我使用什么作为y参数)。有没有人能解释一下为什么这个不起作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-27 06:15:57

如果参数是y,那么我们不需要在group_by中使用x$y,可以使用ensym和evaluate (!!)将其转换为symbol。优点是它可以接受'y‘的带引号或不带引号的参数

代码语言:javascript
代码运行次数:0
运行
复制
library(dplyr)
f1 <- function(x, y) {
           x %>%
             group_by(!!ensym(y)) %>%
             summarize(col.name = mean(var.name))
     }

这里,我们假设“var.name”作为数据集“x”中的列名。

票数 1
EN

Stack Overflow用户

发布于 2020-06-27 11:25:32

我们可以使用卷曲({{}})运算符:

代码语言:javascript
代码运行次数:0
运行
复制
library(dplyr)
library(rlang)

mysummary <– function(x, y) {
   k = x %>% group_by({{y}}) %>% summarize(col.name = mean(var.name))
   return(k)
}

您可以将其用作:

代码语言:javascript
代码运行次数:0
运行
复制
data %>% mysummary(col_name)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62603515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档