当我做:

> quo(DLX6-AS1)

输出是:
<quosure>
expr: ^DLX6 - AS1
env:  global

在破折号周围插入空格。

当我尝试将其转换为字符串时,我得到:
quo(DLX6-AS1) %>% quo_name

"DLX6 - AS1"

或者
quo(DLX6-AS1) %>% rlang::quo_name

或者
quo(`DLX6-AS1`) %>% rlang::quo_name

Error: Can't convert a call to a string

如何在我的函数中使用带破折号的字符串?该函数接受一个基因名称并在数据框中查找该行,但其中一些基因由破折号连接:
geneFn <- function(exp.df = seurat.object@data, gene = SOX2) {

    gene <- enquo(gene)

    exp.df <- exp.df[as_name(gene), ]

}

> geneFn(DLX6-AS1)

谢谢!

之前已经在这里问过这个问题: https://github.com/r-lib/rlang/issues/770 ,但它没有回答如何实际执行此操作。

最佳答案

你有什么版本的rlang?对我来说这有效:

quo(`DLX6-AS1`) %>% quo_name()
#> [1] "DLX6-AS1"

当列名有特殊字符时,您确实需要使用反引号,否则它们将被解释为代码。

请注意,建议使用 as_name()as_label() 而不是 quo_name() ,后者是一个误导性的误称,将来可能会被弃用。

关于r - 将带破折号的 quosure 转换为字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57879075/

10-12 20:03