实现用户定义的 do.call 的什么功能的正确方法是什么?

What's the correct way to implement a user-defined do.call's what function?

我有一个 do.call 用例(调用 mclapply 的结果)简化为以下内容:

myfunc <- function(x, y) {
  str(x)
  #return(x + y)
} 

res <- list(list(x=1,y=1),list(x=2,y=2),list(x=3,y=3))
str(res)

do.call(what="myfunc", res)

无论我在 myfunc 中做什么,它都行不通。我希望 do.call 调用 myfunc 三次并通过响应。 x 和 y 但它用所有数据调用它一次并抱怨它不知道如何处理剩余的参数......实现 what 函数的正确方法是什么,这样将对每个参数应用一些东西像处理任何其他基本函数一样列出元素?

UPDATE 导致我对 do.call 的使用感到困惑的是,我总是看到它对 "reduce" 集合结果的使用。我没有意识到 do.call 调用的函数确实处理列表类型并减少场景,例如rbind

lapply 处理循环,do.call 应用列表元素作为参数。试试这个:

lapply(res, function(l) do.call('myfunc', l))

tidyverse,walk+reduce可以用used

library(purrr)
walk(res, reduce, myfunc)
#num 1
#num 2
#num 3