【问题标题】:converting a quosure to a string in R将quosure转换为R中的字符串
【发布时间】:2018-04-06 12:53:09
【问题描述】:

我一直在 dplyr 中使用 quosures:

library(dplyr)
library(ggplot2)

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

[1]“看着~”“看着清晰”

我很想打印出放入quo的字符串值,但只能得到以下内容:

print(thing)

~清晰

print(thing[2])

清晰度()

substr(thing[2],1, nchar(thing[2]))

[1] “清晰度”

有没有更简单的方法来“取消引用”quo()?

【问题讨论】:

    标签: r dplyr rlang


    【解决方案1】:

    如果你在函数中使用,你需要先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"
    

    【讨论】:

      【解决方案2】:

      quo_name如果quosure太长不起作用:

      > 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"
      

      【讨论】:

        【解决方案3】:

        我们可以使用quo_name

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

        【讨论】:

          猜你喜欢
          • 2020-01-12
          • 2022-12-06
          • 1970-01-01
          • 2015-08-13
          • 2020-01-09
          • 2020-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多