Cách lấy tên biến trong NSE với dplyr

Jan 22 2021

Vì vậy, tôi đã nhiều lần tìm ra nhiều cách khác nhau để đạt được điều này, nhưng kể từ năm ngoái, đã có những thay đổi đối với cách dplyr xử lý đánh giá không chuẩn. Về cơ bản, một cách để đạt được điều này là như sau:

require("dplyr")
test <- function(var){
  mtcars %>% select({{var}})
  print(quo_name(enquo(var)))
}

test(wt)
#> [1] "wt"

Có cách nào trực tiếp hơn để đạt được điều này vào năm 2021 không? Tôi đã có thể thề rằng có một cái gì đó đơn giản hơn nhiều.

Trả lời

2 MatthewSkiffington Jan 22 2021 at 03:42

Sử dụng ensym()từ rlang:

require("dplyr")
require("rlang")
test <- function(var){
    mtcars %>% select({{var}})
    print(ensym(var))
}

test(wt)
#>wt

as.character(test(wt))
#>wt
#>[1] "wt"
akrun Jan 22 2021 at 04:17

Chúng tôi có thể sử dụng deparse/substitutetrongbase R

test <- function(var) deparse(substitute(var))

test(wt)
#[1] "wt"