r语言 - dplyr::p ull与purrr::p luck和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("[[")因此它期望列名作为字符或列索引和整数。

最新更新