我一直在使用dplyr:
library(dplyr)
library(ggplot2)
thing <- quo(clarity)
diamonds %>% select(!!thing)
print(paste("looking at", thing))
[1]“看着〜”“看清晰度”
我真的想打印出放入现状的字符串值,但只能得到以下内容:
print(thing)
&lt; quosure:global&gt;
〜清晰度
print(thing[2])
清晰度()
substr(thing[2],1, nchar(thing[2]))
[1]“清晰度”
是否有更简单的方法来“取消引用”quo()?
答案 0 :(得分:11)
我们可以使用quo_name
print(paste("looking at", quo_name(thing)))
答案 1 :(得分:3)
quo_name
不起作用:
> 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
(未由dplyr
导出)效果更好,但会引入换行符(可以使用参数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"
否则,也可以使用as.character
,但返回长度为2的向量。第二部分是你想要的:
> 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"
答案 2 :(得分:0)
如果在函数中使用,则需要首先enquo()
。还要注意,对于较新版本的rlang,as_name()
似乎是首选!
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"