Converting A Quosure To A String In R


Answer :

We can use quo_name



print(paste("looking at", quo_name(thing)))


quo_name does not work if the quosure is too long:



> q <- quo(a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z)
> quo_name(q)
[1] "+..."


rlang::quo_text (not exported by dplyr) works better, but introduces line breaks (which can be controlled with parameter width):



> rlang::quo_text(q)
[1] "a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + \n q + r + s + t + u + v + w + x + y + z"


Otherwise, as.character can also be used, but returns a vector of length two. The second part is what you want:



> as.character(q)
[1] "~"
[2] "a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z"
> as.character(q)[2]
[1] "a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z"


If you use within a function, you will need to enquo() it first. Note also that with newer versions of rlang, as_name() seems to be preferred!





library(rlang)
fo <- function(arg1= name) {
print(rlang::quo_text(enquo(arg1)))
print(rlang::as_name(enquo(arg1)))
print(rlang::quo_name(enquo(arg1)))
}

fo()
#> [1] "name"
#> [1] "name"
#> [1] "name"


Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable