簡體   English   中英

想知道如何在 `mapply` 中正確使用 `%>%`?

[英]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.

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