as.name和sym的区别是什么?

时间:2019-04-26 14:54:46

标签: r dplyr rlang quosure

我正在努力围绕标准,非标准评估,担保等问题进行讨论。在许多示例中,我看到通过dplyr将传递的字符串变量转换为as.name-可用形式或使用sym软件包中的rlang

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

1 个答案:

答案 0 :(得分:3)

编辑: 我无法轻易创建let post = action.data.find((post) => post.id === action.id) let likeLen = post ? post.Likes.length : somethingYouWant 无法正常工作的情况。 Hadley似乎同意as.name可能有用。尽管这使用的是as.name确实很健壮,但是尝试使用selectgroup_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()和相关功能可以消除编码方面的麻烦。