【问题标题】:What's wrong with this function (R) (Beginner)这个函数有什么问题(R)(初学者)
【发布时间】:2020-10-17 13:45:34
【问题描述】:

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

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

这要么根本不起作用(如果我只是将 y 作为 group_by 函数中的参数,则说没有名为 y 的列)或者使用上面的当前代码返回一个相同的 tibble,无论我按什么分组(在这种情况下,它总是按数据集中的变量 year 分组,无论我使用什么作为 y 参数)。谁能帮助解释为什么这不起作用?

【问题讨论】:

    标签: r function dplyr


    【解决方案1】:

    如果y 是参数,那么我们不需要x$ygroup_by 中,它可以用ensym 转换为符号并计算(!!)。优点是它可以为 'y' 采用带引号或不带引号的参数

    library(dplyr)
    f1 <- function(x, y) {
               x %>%
                 group_by(!!ensym(y)) %>%
                 summarize(col.name = mean(var.name))
         }
    

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

    【讨论】:

      【解决方案2】:

      我们可以使用 curly-curly ({{}}) 运算符:

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

      您可以将其用作:

      data %>% mysummary(col_name)
      

      【讨论】:

        猜你喜欢
        • 2022-11-14
        • 1970-01-01
        • 2021-04-29
        • 2018-06-14
        • 2022-11-19
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多