![](/img/trans.png)
[英]Conditionally applying functions to grouped dataframes in R with magrittr, dplyr and purrr
[英]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.