[英]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
的參數為1
和length(.)
,因此第一個參數規則生效; 為了避免這種情況,請使用{}
將表達式括起來; 您可以在將占位符重新用於屬性中閱讀有關此內容的更多信息:
重新使用占位符作為屬性
直接在右側表達式中多次使用占位符很簡單。 但是,當占位符僅出現在嵌套表達式中時,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.