我正在尝试找出如何将许多功能组合成一个新功能。我有确定哪些功能应该组合的代码,并将它们存储在列表中。一些函数共享参数,因此在构建新函数之前,我需要消除重复项。以下作品:
fun1 <- function(x, y) x + y
fun2 <- function(y, z) z * y
funlist <- list(fun1, fun2)
args <- unlist(lapply(funlist, formals)) ## "x", "y", "y", "z"
args <- args[unique(names(args))] ## "x", "y", "z"
此时,args是具有三个命名元素“ x”,“ y”和“ z”的列表。as.pairlist()
构建新功能时,可以将此传递给。
但是,如果命名功能列表中的函数,我的代码将中断:
funlist2 <- list(fun1 = fun1, fun2 = fun1)
args2 <- unlist(lapply(funlist2, formals)) ## "fun1.x", "fun1.y", "fun2.y", "fun2.z"
args2 <- args2[unique(names(args2))] ## "fun1.x", "fun1.y", "fun2.y", "fun2.z"
在此,函数名称位于参数之前,从而使每个参数都是唯一的。如果我调用formals
单个列表元素,则不会发生:
formals(funlist[[1]])
formals(funlist2[[1]])
## both return the same dotted pair list, $x, $y
列表元素名称仅在使用时出现lapply
。我可以用一个临时列表来解决此问题,该列表将从funlist2中删除名称,但是我不明白为什么会这样-为什么将名称强加到形式输出中?
您应该在unlist
调用之前查看输出:
(args2 <- lapply(funlist2, formals))
$fun1
$fun1$x
$fun1$y
$fun2
$fun2$x
$fun2$y
lapply
将名称放回顶层,但下一级的名称相同,unlist
然后将不同级别的名称连接起来,并用句点将它们连接起来。在第一个实例中,unlist
在第一级没有看到任何名称,因此不需要进行任何串联。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句