【问题标题】:Using dplyr group_by in a function在函数中使用 dplyr group_by
【发布时间】:2017-06-20 17:53:26
【问题描述】:

我正在尝试在本地函数中使用 dplyr 的 group_by,例如:

testFunction <- function(df, x) {
  df %>%
group_by(x) %>%
summarize(mean.Petal.Width = mean(Petal.Width))
}

testFunction(iris, Species)

我得到一个错误“...未知变量分组:x” 我试过 group_by_ 它给了我整个数据集的摘要。 有人知道我该如何解决这个问题吗?

提前致谢!

【问题讨论】:

    标签: r function group-by dplyr nse


    【解决方案1】:

    这是使用来自dplyr 的新enquo 的一种方法,其中enquo 获取字符串并转换为quosure,通过在@987654328 中取消引用(UQ!!)进行评估@、mutatesummarise

    library(dplyr)
    testFunction <- function(df, x) {
     x <- enquo(x)
      df %>%
        group_by(!! x) %>%
         summarize(mean.Petal.Width = mean(Petal.Width))
     }
    
    testFunction(iris, Species)
    # A tibble: 3 x 2
    #     Species mean.Petal.Width
    #      <fctr>            <dbl>
    #1     setosa            0.246
    #2 versicolor            1.326
    #3  virginica            2.026
    

    【讨论】:

    • 酷。这行得通,非常感谢。您有涵盖此内容的参考网址吗?
    • @RoseS 你可以查看here
    【解决方案2】:

    我让它像这样工作:

    testFunction <- function(df, x) {
                          df %>%
                             group_by(get(x)) %>%
                             summarize(mean.Petal.Width = mean(Petal.Width))
                     }
    
    testFunction(iris,"Species")
    

    我将x 更改为get(x),并将testFunction(iris,...) 中的Species 更改为"Species"

    【讨论】:

    • 我尝试了 20 种方法,所以不要问我为什么会奏效...;)
    • hmmm,我认为'get(x)' 有帮助......它现在似乎明白要分组的内容了。现在我得到错误 ".... object "Species" not found" ,所以在调用函数时我无法让它在有或没有引号的情况下工作。你知道为什么这对你有用吗?哈!我刚看到“......不要问我它是如何工作的”
    • 您是否加载了dplyr?更新dplyr?你也可以试试akrun 答案...应该是等价的。
    • 在看到 Akrun 的回复之前,我没有加载更新的 dplyr,所以可能就是这样。非常感谢您的帮助!
    猜你喜欢
    • 2017-07-12
    • 2018-11-02
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2014-06-04
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多