当我做:
> 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/