我在网上找到的有关tidyeval的所有内容都是较旧的,并且不及最新版本的tidyverse \ dplyr,或者不太适用。
一个示例是:
df <- tribble(
~var1, ~var2, ~var3,
1, 2, 3,
4, 5, 6,
7, 8, 9
)
我写了一个小函数:
fun <- function(data, select_var, arrange_var) {
select_var <- enquo(select_var)
arrange_var <- enquo(arrange_var)
data %>%
select(!!select_var) %>%
arrange(!!arrange_var)
}
该函数只选择列,然后按行排列。
当我将参数传递给函数时,它可以正常使用c()中的单个变量:
fun(df,
c(var1,
var2)),
c(var2))
但是,当我尝试传递两个这样的变量时:
fun(df,
c(var1,
var2)),
c(var1,
var2))
我收到以下错误:
Error: incorrect size (282) at position 1, expecting : 141
解决办法:更换arrange_var有...和没有封闭他们指定的变量c()也可以正常工作。
library("dplyr")
df <- tribble(
~var1, ~var2, ~var3,
1, 2, 3,
4, 5, 6,
7, 8, 9
)
fun <- function(data, select_var, ...) {
select_var <- enquo(select_var)
arrange_var <- enquos(...)
data %>%
select(!!select_var) %>%
arrange(!!!arrange_var)
}
fun(df, c(var1, var2), var2)
#> # A tibble: 3 x 2
#> var1 var2
#> <dbl> <dbl>
#> 1 1 2
#> 2 4 5
#> 3 7 8
fun(df, c(var1, var2), var1, var2)
#> # A tibble: 3 x 2
#> var1 var2
#> <dbl> <dbl>
#> 1 1 2
#> 2 4 5
#> 3 7 8
暂无数据