- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
% ,并且我在准报价和/或非标准评估方面遇到了麻烦。具体来说-6ren">
我正在尝试搜索数据库,然后使用源自原始搜索的名称标记输出,"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")
这有点超出我的想象。
This post带我去试试
!! 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
sym()
“将字符串作为输入并将它们转换为符号”和
!!
“取消引用它的论点”。但是,在下面的示例中,
sym(count_colname)
似乎取消引用
derived_name_letr_count
.我不明白为什么
!!
在
!! 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"
最佳答案
根据 top_n
文档( ?top_n
),它不支持 character
/string
输入因此第一个示例不起作用。在您的第二个示例中,rlang::sym
将字符串转换为变量名,然后 !!
取消引用它以便它可以在 top_n
内进行评估.注: top_n
和其他 dplyr
verbs自动引用他们的输入。
使用 rlang::qq_show
正如@lionel 所建议的,我们可以看到它不起作用,因为没有 count_colname
栏目letrs_count.df
library(tidyverse)
set.seed(1)
letrs <- letters[rnorm(52, 13.5, 5)]
letrs_count.df <- letrs %>%
table() %>%
as.data.frame()
search_name <- "derived_name"
count_colname <- paste0(search_name, "_letr_count")
colnames(letrs_count.df) <- c("letr", count_colname)
letrs_count.df
#> letr derived_name_letr_count
#> 1 b 1
#> 2 c 1
#> 3 f 2
...
rlang::qq_show(top_n(letrs_count.df, 5, count_colname))
#> top_n(letrs_count.df, 5, count_colname)
sym
&
!!
创建存在于
letrs_count.df
中的正确列名
rlang::qq_show(top_n(letrs_count.df, 5, !! sym(count_colname)))
#> top_n(letrs_count.df, 5, derived_name_letr_count)
letrs_count.df %>%
top_n(5, !! sym(count_colname))
#> letr derived_name_letr_count
#> 1 l 5
#> 2 m 6
#> 3 o 7
#> 4 p 5
#> 5 q 6
top_n(x, n, wt)
x
:tbl()
过滤 n
: 要返回的行数。如 x
被分组,这是每组的行数。将包括超过 n
行,如果有关系。如 n
为正,选择顶部 n
行。如果为负,则选择底部 n
行。 wt
: (可选的)。用于排序的变量。如果未指定,默认为 tbl
中的最后一个变量.vignette("programming")
介绍这些概念。 关于r - dplyr() 中的非标准评估和 quasiquotation 未按(天真)预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51738267/
我使用 Visual Studio Professional 2012。我成功地预编译了一个类(头文件和源代码)。几天后,当编译另一个使用前一个类的类(目前仅用于头文件)时,编译器发现缺少引用 if(
我正在尝试搜索数据库,然后使用源自原始搜索的名称标记输出,"derived_name"在下面的可重现示例中。我正在使用 dplyr管道 %>% ,并且我在准报价和/或非标准评估方面遇到了麻烦。具体来说
我是一名优秀的程序员,十分优秀!