r - dplyr::pull 与 purrr::pluck 和 magrittr::extract2 的区别是什么?
问题描述
过去,当使用数据框并希望将单列作为向量时,我会这样使用magrittr::extract2()
:
mtcars %>%
mutate(wt_to_hp = wt/hp) %>%
extract2('wt_to_hp')
但我已经看到了,dplyr::pull()
并且purrr::pluck()
也存在做同样的工作:从数据框中返回单个向量,与[[
.
假设我总是为我从事的任何项目加载所有 3 个库,那么这 3 个函数中的每一个的优点和用例是什么?或者更具体地说,它们之间的区别是什么?
解决方案
当你“应该”使用一个函数时,真的是个人喜好问题。哪个功能最清楚地表达了您的意图。它们之间存在差异。例如,pluck
当您想要进行多次提取时效果更好。从帮助文件:
accessor(x[[1]])$foo
# is the same as
pluck(x, 1, accessor, "foo")
因此,虽然它可用于仅提取一列,但当您具有更深的嵌套结构或想要使用访问器函数进行组合时,它会很有用。
该pull
函数旨在与dplyr
函数的结果融为一体。它可以使用包中其他函数的任何方式来获取列的名称。例如,它将与!!
风格扩展一起使用,而sayextract2
则不会。
irispull <- function(x) {
iris %>% pull(!!enquo(x))
}
irispull(Sepal.Length)
并且extract2
只不过是基本函数的“更易读”的包装器[[
。事实上,它被定义为.Primitive("[[")
它期望列名作为字符或列索引和整数。
推荐阅读
- mysql - 使用 pyspark 或 spark SQL 选择不在组中的所有或特定列
- firebase - Firebase Audience 中的最大条件数
- python - Airflow - 从 BigQuery 动态生成任务,但任务在之前完成之前重复运行
- php - 如何在另一个页面中保存用户输入而不覆盖 PHP 中以前的用户输入
- php - PHP - 查找缺失值的关联数组逻辑
- google-apps-script - 使用 Google Apps 脚本中的库的脚本会慢多少?
- html - 如何保持 CSS 悬停和 jQuery 文本/输入和容器打开?
- r - Vroom 不维护列类型,为什么?
- java - SSLContext 不使用来自 JVM TrustStore 的证书
- java - 在 Java 应用程序中嵌入 kotlin-compiler