r - 关于使用 dplyr 和 tidy 评估进行 R 编程的问题
问题描述
伙计们,我有几个关于如何使用 dplyr 进行整洁评估的问题
以下代码使用 mtcars 数据集按气缸生成汽车计数:
mtcars %>%
select(cyl) %>%
group_by(cyl) %>%
tally()
按预期输出:
# A tibble: 3 x 2
cyl n
* <dbl> <int>
1 4 11
2 6 7
3 8 14
如果我想将分组因子作为变量传递,那么这将失败:
var <- "cyl"
mtcars %>%
select(var) %>%
group_by(var) %>%
tally()
带有错误消息:
Error: Must group by variables found in `.data`.
* Column `var` is not found.
这也失败了:
var <- "cyl"
mtcars %>%
select(var) %>%
group_by({{ var}}) %>%
tally()
生产输出:
# A tibble: 1 x 2
`"cyl"` n
* <chr> <int>
1 cyl 32
但是,此代码按预期工作:
var <- "cyl"
mtcars %>%
select(var) %>%
group_by(.data[[ var]]) %>%
tally()
产生预期的输出:
# A tibble: 3 x 2
cyl n
* <dbl> <int>
1 4 11
2 6 7
3 8 14
我对此有两个问题,想知道是否有人可以提供帮助!
为什么不
select(var)
使用任何 dplyr tidy 评估扩展(例如select({{ var }})
or )也能正常工作select(.data[[ var ]])
?什么是
group_by()
错误group_by({{ var }})
但group_by(.data[[ var ]])
正确的?
非常感谢!
马特。
解决方案
这取决于这些功能如何工作并接受输入。
如果您查看?select
此问题相关部分的文档是 -
这些助手从字符向量中选择变量:
all_of():匹配字符向量中的变量名。所有名称都必须存在,否则会引发越界错误。
any_of():与 all_of() 相同,但不为不存在的名称引发错误。
因此,您可以将all_of
and any_of
inselect
与字符向量一起使用,因此在运行时会收到警告mtcars %>% select(var)
注意:在选择中使用外部向量是不明确的。ℹ 使用
all_of(var)
而不是var
静音此消息。
并且没有警告mtcars %>% select(all_of(var))
。
就group_by
目前而言,没有这样的具体规定,您需要使用mtcars %>% group_by(.data[[var]])
.
推荐阅读
- html - 引导模式未以预期方式显示
- c# - 如何根据 ASCII 值描述配置文件中的字符?
- django - 我想在 django 管理面板中查看所有用户,我可以选择多个用户
- python - 在二维数组上使用 scipy 实现三次插值
- javascript - 如何在反应中创建动画平滑的粘性标题
- php - 导入帖子时的 Wordpress 自定义分类
- docker - 使用 docker compose 运行 Apache Skywalking 的问题
- linux - 请求 'gl >= 9.2.0' 但 GL 版本是 1.2 xorg-server
- amazon-web-services - 如何使用计划/延迟事件实现事件驱动架构?
- python - 如何从图中确定节点的入度和出度?