实现用户定义的 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
我有一个 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