[英]Would like to know how to properly use `%>%` in `mapply`?
想知道如何以適當的方式將%>%
與mapply
結合起來。 這是玩具樣品
A = data.table(a = letters[1:3], b = 3:1)
mapply(function(x, y) str_c(x,"---", y), A$a, A$b)
它給出了一個命名的字符向量,如下所示
a b c
"a---3" "b---2" "c---1"
但是,它會生成一個我盡量避免的新變量,並希望以這種形式出現:
A %>% mapply(function(x, y) str_c(x,"---", y), .$a, .$b)
但結果是
object '.' of mode 'function' was not found
請告訴我怎么做?
要解釋為什么您的代碼不起作用,您需要知道編寫obj %>% f(args)
總是將obj
作為調用f
的第一個參數插入,除非您使用.
作為另一個論點。 換句話說,它相當於
obj %>% f(., args)
由於您不使用.
單獨作為參數(即使您使用.$a
和.%b
),您的調用等效於
A %>% mapply(., function(x, y) str_c(x,"---", y), .$a, .$b)
…這不起作用,因為mapply
預計它的第一個參數是 function。
正如 Ronak 的回答所示,為了避免這種情況,您可以將f(args)
放入{…}
:
obj %>% {f(args)}
這種句法形式明確禁用了有關插入的規則.
如上所述。 這是為此目的定義的特殊情況。
或者,您可以使用來自“magrittr”的另一個 pipe 運算符,即展覽 pipe , %$%
。 這個工作方式不同:它從左側表達式中提取命名組件。 這樣,你可以寫
A %$% mapply(function(x, y) str_c(x,"---", y), a, b)
這似乎不適合使用%>%
。 如果您需要它用於學習目的,請使用:
A %>% {mapply(function(x, y) stringr::str_c(x,"---", y), .$a, .$b)}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.