递归Map()传递多个列表和常量作为参数

时间:2017-02-25 20:24:11

标签: r function recursion arguments parameter-passing

这是一个与我之前的两个问题相关的问题: https://stackoverflow.com/questions/37996470/how-to-map-a-function-recursively-through-nested-lists-in-r,和 https://stackoverflow.com/questions/37906958/how-to-combine-rapply-and-mapply-or-how-to-use-mapply-map-recursively ,除了现在我要求更多的花里胡哨......

所以我有多个嵌套列表:

A = list(list(list(c(1,2,3), c(2,3,4)),list(c(1,2,3),c(2,3,4))), list(c(4,3,2), c(3,2,1)))
B = list(list(list(c(1,2,3), c(2,3,4)),list(c(1,2,3),c(2,3,4))), list(c(4,3,2), c(3,2,1)))

我想以递归方式将函数应用于AB中的相应列表。如果该函数仅将AB的子列表作为参数,根据我之前问题的优秀答案,可以这样做:

recursive  <- function(fun, x, y) {
if(is.atomic(x) && is.atomic(y)) {
    match.fun(fun)(x, y) 
} else  {
    Map(recursive, x, y, MoreArgs=list(fun=fun))
    }
}

现在我想知道如何在AB的不同子列表中添加更多不变的参数?例如,我的功能可能是

formula = function(sublistA, sublistB, arg1, arg2){return(arg1*sublistA+arg2*sublistB)}

我认为可能从上面改编的递归函数可能看起来像

recursive  <- function(fun, x, y, a, b) {
if(is.list(a) && is.list(b)){
}...
}

并且我们可以使递归函数灵活地关于结构化列表的数量,例如xy以及常量的数量(可以是矩阵,向量,列表,只要不包括在内递归)如ab

非常感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我自己弄清楚了......相当愚蠢的问题本身。

只需编写包含常量的函数......