如果我想将包含运算符与 `starts_with()` 一起使用怎么办?
What if I want to use embracing operator with `starts_with()`?
使用包含运算符无需将传递给函数的参数用双引号引起来。
但是如果我想将它与 starts_with()
一起使用怎么办?
# This works.
test <- function(var) {
mtcars |>
dplyr::select({{ var }})
}
test(mpg) |> head()
#> mpg
#> Mazda RX4 21.0
#> Mazda RX4 Wag 21.0
#> Datsun 710 22.8
#> Hornet 4 Drive 21.4
#> Hornet Sportabout 18.7
#> Valiant 18.1
# But this won't work.
test2 <- function(var) {
mtcars |>
dplyr::select(starts_with({{ var }}))
}
test2(m) |> head()
#> Error in `dplyr::select()`:
#> ! オブジェクト 'm' がありません
即使 select
接受未加引号的字符串并因此与 test(m)
一起使用,但 starts_with
并非如此,即
test2('m')
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
试试下面的代码:
library(dplyr)
test2 <- function(var) {
x <- deparse(substitute(var))
mtcars |> select(starts_with(x))
}
test2(m) |> head()
输出:
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4
Hornet Sportabout 18.7
Valiant 18.1
使用包含运算符无需将传递给函数的参数用双引号引起来。
但是如果我想将它与 starts_with()
一起使用怎么办?
# This works.
test <- function(var) {
mtcars |>
dplyr::select({{ var }})
}
test(mpg) |> head()
#> mpg
#> Mazda RX4 21.0
#> Mazda RX4 Wag 21.0
#> Datsun 710 22.8
#> Hornet 4 Drive 21.4
#> Hornet Sportabout 18.7
#> Valiant 18.1
# But this won't work.
test2 <- function(var) {
mtcars |>
dplyr::select(starts_with({{ var }}))
}
test2(m) |> head()
#> Error in `dplyr::select()`:
#> ! オブジェクト 'm' がありません
即使 select
接受未加引号的字符串并因此与 test(m)
一起使用,但 starts_with
并非如此,即
test2('m')
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
试试下面的代码:
library(dplyr)
test2 <- function(var) {
x <- deparse(substitute(var))
mtcars |> select(starts_with(x))
}
test2(m) |> head()
输出:
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4
Hornet Sportabout 18.7
Valiant 18.1