我在網(wǎng)上找到的有關(guān)tidyeval的所有內(nèi)容都是較舊的,并且不及最新版本的tidyverse \ dplyr,或者不太適用。
一個(gè)示例是:
df <- tribble(
~var1, ~var2, ~var3,
1, 2, 3,
4, 5, 6,
7, 8, 9
)
我寫(xiě)了一個(gè)小函數(shù):
fun <- function(data, select_var, arrange_var) {
select_var <- enquo(select_var)
arrange_var <- enquo(arrange_var)
data %>%
select(!!select_var) %>%
arrange(!!arrange_var)
}
該函數(shù)只選擇列,然后按行排列。
當(dāng)我將參數(shù)傳遞給函數(shù)時(shí),它可以正常使用c()中的單個(gè)變量:
fun(df,
c(var1,
var2)),
c(var2))
但是,當(dāng)我嘗試傳遞兩個(gè)這樣的變量時(shí):
fun(df,
c(var1,
var2)),
c(var1,
var2))
我收到以下錯(cuò)誤:
Error: incorrect size (282) at position 1, expecting : 141
解決辦法:更換arrange_var有...和沒(méi)有封閉他們指定的變量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








暫無(wú)數(shù)據(jù)