我正在尝试搜索数据库,然后"derived_name"
在下面的可重现示例中使用源自原始搜索的名称标记输出。我正在使用dplyr
管道%>%
,并且在进行准报价和/或非标准评估时遇到了麻烦。具体来说,在最终函数中使用count_colname
派生自 的字符对象无法对数据帧进行子集化。"derived_name"
top_n()
search_name <- "derived_name"
set.seed(1)
letrs <- letters[rnorm(52, 13.5, 5)]
letrs_count.df <- letrs %>%
table() %>%
as.data.frame()
count_colname <- paste0(search_name, "_letr_count")
colnames(letrs_count.df) <- c("letr", count_colname)
letrs_top.df <- letrs_count.df %>%
top_n(5, count_colname)
identical(letrs_top.df, letrs_count.df)
# [1] TRUE
基于这个讨论,我认为上面的代码可以工作。而这篇文章引导我尝试top_n_()
,这似乎不存在。
我正在学习vignette("programming")
这有点过头了。这篇文章让我尝试了!! sym()
有效的语法,但我不知道为什么!帮助理解为什么下面的代码工作将不胜感激。谢谢。
colnames(letrs_count.df) <- c("letr", count_colname)
letrs_top.df <- letrs_count.df %>%
top_n(5, (!! sym(count_colname)))
letrs_top.df
# letr derived_name_letr_count
# 1 l 5
# 2 m 6
# 3 o 7
# 4 p 5
# 5 q 6
基于@lionel 和@Tung 下面的问题和评论的其他令人困惑的示例。这里让我感到困惑的是,帮助文件说sym()
“将字符串作为输入并将它们转换为符号”和!!
“取消引用它的参数”。但是,在下面的示例中,sym(count_colname)
似乎取消引用derived_name_letr_count
. 我不明白为什么!!
需要 in !! sym(count_colname)
,因为sym(count_colname)
并qq_show(!! sym(count_colname))
给出相同的值。
count_colname
# [1] "derived_name_letr_count"
sym(count_colname)
# derived_name_letr_count
qq_show(count_colname)
# count_colname
qq_show(sym(count_colname))
# sym(count_colname)
qq_show(!! sym(count_colname))
# derived_name_letr_count
qq_show(!! count_colname)
# "derived_name_letr_count"