簡體   English   中英

堆肥函數purrr中管道操作員的行為-dplyr

[英]behavior of pipe operator in compostie functions purrr - dplyr

簡而言之,在purrr-dplyr軟件包中使用管道運算符的定義如下:

y%>%f(x,。,z)與f(x,y,z)相同

我正在嘗試使用管道運算符執行以下任務。 首先,我向您展示了不使用管道的任務:

#####for reproducibility
set.seed(50)
z0<-factor(sample(c(letters[1:3],NA),100,replace = T))
###the task
rep(1,length(table(z0)))

現在我想使用管道來做到這一點:

z0%>%table%>%rep(1,length(.))

但是結果不一樣。 似乎管道操作員無法處理對功能組合的正確分配。 那是

y%>%f(x,g(。))應該與f(x,g(y))相同

因此,具體的問題是ti是否有可能做到

y%>%f(x,g(。))

預先感謝您的評論。

%>%實現第一個參數規則,即它將先前的數據作為第一個參數傳遞給函數if . 不是直接的論點; 在第二種情況下, rep的參數為1length(.) ,因此第一個參數規則生效; 為了避免這種情況,請使用{}將表達式括起來; 您可以在將占位符重新用於屬性中閱讀有關此內容的更多信息:

重新使用占位符作為屬性

直接在右側表達式中多次使用占位符很簡單。 但是,當占位符僅出現在嵌套表達式中時,magrittr仍將應用第一參數規則。 原因是在大多數情況下,這會產生更干凈的代碼。

  x %>% f(y = nrow(.), z = ncol(.)) is equivalent to f(x, y = nrow(x), z = ncol(x)) 

可以通過將右手括在右括號中來否決此行為:

 x %>% {f(y = nrow(.), z = ncol(.))} is equivalent to f(y = nrow(x), z = ncol(x)) 
rep(1,length(table(z0)))
# [1] 1 1 1

等效為:

z0 %>% table %>% {rep(1,length(.))}
# [1] 1 1 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM