繁体   English   中英

dplyr::pull 与 purrr::pluck 和 magrittr::extract2 有何区别?

[英]What distinguishes dplyr::pull from purrr::pluck and 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函数的结果混合。 它可以使用包中其他函数的任何方式来获取列的名称。 例如,它将与!! 样式扩展,其中说extract2不会。

irispull <- function(x) {
  iris %>% pull(!!enquo(x))
}
irispull(Sepal.Length)

extract2是基本函数[[的“更具可读性”的包装器。 事实上,它被定义为.Primitive("[[")所以它期望列名作为字符或列索引和整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM