![](/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.