2

我试图围绕标准、非标准评估、quosures 等。在许多示例中,我看到传递的字符串变量被转换为带有或带有包的dplyr可用形式。as.namesymrlang

它们在管道中可以互换吗?哪种情况会失败?

4

1 回答 1

3

编辑:我不能轻易地创建一个as.name无法工作的场景。哈德利似乎同意这as.name可能会奏效。尽管这是使用select确实很健壮的,但尝试使用group_bysummarise似乎没有区别。

稳健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和相关功能似乎消除了与编码有关的麻烦。

于 2019-04-26T14:57:39.833 回答