วิธีรับชื่อตัวแปรใน NSE ด้วย dplyr

Jan 22 2021

ดังนั้นฉันจึงพบวิธีต่างๆมากมายในการบรรลุเป้าหมายนี้ แต่ในปีที่ผ่านมามีการเปลี่ยนแปลงวิธีที่ dplyr จัดการกับการประเมินผลที่ไม่ได้มาตรฐาน โดยพื้นฐานแล้ววิธีหนึ่งในการบรรลุเป้าหมายนี้มีดังนี้:

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

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

มีวิธีที่ตรงกว่าในการบรรลุเป้าหมายนี้ในปี 2021 หรือไม่? ฉันสาบานได้เลยว่ามีบางอย่างที่ง่ายกว่านี้มาก

คำตอบ

2 MatthewSkiffington Jan 22 2021 at 03:42

ใช้ensym()จาก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

เราสามารถใช้deparse/substituteในbase R

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

test(wt)
#[1] "wt"