我正在努力围绕标准,非标准评估,担保等问题进行讨论。在许多示例中,我看到通过dplyr
将传递的字符串变量转换为as.name
-可用形式或使用sym
软件包中的rlang
。
它们在管道中可以互换吗?在哪些情况下会失败?
答案 0 :(得分:3)
编辑:
我无法轻易创建let post = action.data.find((post) => post.id === action.id)
let likeLen = post ? post.Likes.length : somethingYouWant
无法正常工作的情况。 Hadley似乎同意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()
和相关功能可以消除编码方面的麻烦。