【发布时间】:2019-08-30 21:18:16
【问题描述】:
我正在尝试调用一个函数,使用一个包含两个小标题的列表作为参数。
我尝试了多种方法(pmap、do.call、invoke、exec),但似乎都没有。似乎没有使用两个小标题,而是使用小标题的列表。
示例数据:
list1 <- list(test1 = tibble(a = 1:3, b = 4:6),
test2 = tibble(c = 5:7, d = 7:9))
fun <- function(tbl1,tbl2) tbl1[1,] + tbl2[1,]
我想得到的是:
print(magic_function_call(fun, list1))
> 6 11
没有函数的硬编码是这样的:
list1$test1[1,] + list1$test2[1,]
我得到的是:
pmap(list1,fun)
> Error in .f(test1 = .l[[1L]][[i]], test2 = .l[[2L]][[i]], ...) :
unused arguments (test1 = .l[[1]][[i]], test2 = .l[[2]][[i]])
do.call(fun,list1)
> Error in (function (tbl1, tbl2) :
unused arguments (test1 = list(1:3, 4:6), test2 = list(5:7, 7:9))
invoke(fun, list1)
> Error in (function (tbl1, tbl2) :
unused arguments (test1 = list(1:3, 4:6), test2 = list(5:7, 7:9))
exec(fun, !!!list1)
> Error in (function (tbl1, tbl2) :
unused arguments (test1 = list(1:3, 4:6), test2 = list(5:7, 7:9))
手工操作可以,但感觉有点笨拙,一旦我想使用不同大小的动态列表,我就会再次遇到问题。
fun(list1$test1, list1$test2)
> 6 11
有什么简单的方法可以做到这一点吗?我只是错过了什么吗?
所以简而言之:我想在一个列表中给出两个小标题,作为函数的参数。
【问题讨论】:
-
什么是
magic_function_call()?那是您要填写pmap或其他功能的地方吗?我认为您遇到了difference between[and[[ -
@joran 非常感谢,这是我忽略的问题!您是否知道使用不匹配函数参数名称的 do.call(或任何其他方式)的方法
-
是的,``` fun
-
如果某个答案解决了您的问题,请点击旁边的勾号接受它;不要编辑问题。
-
如果解决方案是您在 cmets 中给出的解决方案,那么您可以自己发布答案。
标签: r list nested-lists tibble function-call