我试图围绕标准、非标准评估、quosures 等。在许多示例中,我看到传递的字符串变量被转换为带有或带有包的dplyr
可用形式。as.name
sym
rlang
它们在管道中可以互换吗?哪种情况会失败?
编辑:我不能轻易地创建一个as.name
无法工作的场景。哈德利似乎同意这as.name
可能会奏效。尽管这是使用select
确实很健壮的,但尝试使用group_by
并summarise
似乎没有区别。
稳健select
:
varName <- "Sepal.Length"
select(iris, varName) #This works
as.name
我运行的sym
几个示例之间没有区别。
iris %>%
group_by(!!as.name(varName))
iris %>%
group_by(!!sym(varName))
尝试改变encoding
:
var1 <- `Encoding<-`(varName, "unknown")
两者都as.name
有效sym
。
原始答案:
从文档?sym
:
这些函数将字符串作为输入并将它们转换为符号。
与 相反as.name()
,它们预先将字符串转换为本机编码。这是必要的,因为符号会默默地删除字符串的编码标记(请参阅set_str_encoding()
)。
因此,使用sym
和相关功能似乎消除了与编码有关的麻烦。