首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中将quosure转换为字符串

在R中将quosure转换为字符串
EN

Stack Overflow用户
提问于 2017-10-25 12:21:09
回答 3查看 6.9K关注 0票数 12

我一直在使用dplyr的商号:

代码语言:javascript
复制
library(dplyr)
library(ggplot2)

thing <- quo(clarity)
diamonds %>% select(!!thing)
print(paste("looking at", thing))

“看~”“看清楚”

我真的想把字符串值打印出来,但只能得到以下内容:

代码语言:javascript
复制
print(thing)

<质量: global> ~清晰度

代码语言:javascript
复制
print(thing[2])

清晰度()

代码语言:javascript
复制
substr(thing[2],1, nchar(thing[2]))

1“清晰”

是否有更简单的方法来“取消”一个条件()?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-25 12:22:39

我们可以使用quo_name

代码语言:javascript
复制
print(paste("looking at", quo_name(thing)))
票数 28
EN

Stack Overflow用户

发布于 2018-05-08 08:42:25

如果质量太长,quo_name就不能工作:

代码语言:javascript
复制
> 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来控制):

代码语言:javascript
复制
> 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的向量。第二部分是你想要的:

代码语言:javascript
复制
> 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"
票数 9
EN

Stack Overflow用户

发布于 2019-06-19 02:23:44

如果在函数中使用,则需要首先对其进行enquo()。还请注意,使用更新版本的rlang,as_name()似乎是首选!

代码语言:javascript
复制
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"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46932310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档