无法使用 R 中的函数将变量参数传递给 dplyr

Unable to pass variable arguments to dplyr using a function in R

我无法使用函数将变量参数传递给 dplyr。该函数的模拟版本是

Fun.function(data, var.1, var.2) {
data %>% 
group_by_(var.1) %>%
summarise_(mean.var.2 = mean(var.2))
}

错误是

Error: Index out of bounds

如果有人能帮助我,那就太好了。

如果您通读 NSE vignette,您会发现您需要对函数内部使用的函数进行惰性求值。使用我下面的示例,您需要将变量放在引号中。

查看您的函数,您正在尝试执行以下操作,以 mtcars 为例:

  mtcars %>%
        group_by_(~ cyl) %>%
        summarise_(mean.var.2 = ~mean(mpg))

要将其转换为您的函数,您需要执行以下操作并在调用函数时将变量放在引号中。

f <- function(data, var.1, var.2) {
      data %>% 
            group_by_(lazyeval::interp(~ var, var = as.name(var.1))) %>% 
            summarise_(mean.var.2 = lazyeval::interp(~mean(var), var = as.name(var.2)))
}

 f(mtcars, "cyl", "mpg")
  cyl mean.var.2
1   4   26.66364
2   6   19.74286
3   8   15.10000

检查它们是否与仅使用 dplyr 命令相同

identical(
      f(mtcars, "cyl", "mpg"),
      mtcars %>%
            group_by_(~ cyl) %>%
            summarise_(mean.var.2 = ~mean(mpg))
)
[1] TRUE