无法使用 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
我无法使用函数将变量参数传递给 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