簡體   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