Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.9k views
in Technique[技术] by (71.8m points)

r - Forcing dplyr to evaluate passed symbol / quosure when conflicting with existing column name

Problem

I want to string of a column name to dplyr::arrange in a form am <- "cyl". The purpose is to sort by column cyl.

Desired outcome

dplyr::arrange(mtcars, cyl)

Attempts

am <- "cyl"

1) rlang::quo

dplyr::arrange(mtcars, !!rlang::quo(am))

Sorted by am not cyl.

2) rang::ensym

dplyr::arrange(mtcars, !!rlang::ensym(am))

Sorted by am not cyl.

3) Culry Curly

dplyr::arrange(mtcars, {{am}})

Not sorted.


Background

In actual function I'm sorting data frame by index column I'm creating. The variable with column name is called index_column. I want protect myself from, albeit highly unlikely, scenario of actual data containing index_column. I could solve that using make.names and scanning for unique column names but I'm more interested in solving the problem above.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It would be sym

out2 <-  dplyr::arrange(mtcars, !!rlang::sym(am))

-testing with OP's expected

out1 <- dplyr::arrange(mtcars, cyl)
identical(out1, out2)
#[1] TRUE

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.5k users

...