说我有一个功能:
MyFunction=function(x,y,z,thelist){
a = x+3
b = y+4
c = z+2
mylist=thelist
myfunc1=function(form=a) a+2
myfunc2=function(form=b) b+2
myfunc3=function(form=c) c+2
function(...){
.x = as.list(substitute(list(...)))[-1]
CombinedList = lapply(seq_along(mylist), function (y,.x) {
numbercols = length(eval(.x[[1]])(form=eval(formals(eval(.x[[1]]))$form))[[1]])
numbercolsplusone = numbercols+1
elementz = matrix(NA,nrow=length(.x),ncol=numbercolsplusone)
for (i in seq_along(.x)) {
elementz[i,1:numbercols] = eval(.x[[i]])(form=eval(formals(eval(.x[[i]]))$form))[[y]]
elementz[i,numbercolsplusone] = substr(as.character(.x[[i]]),1,nchar(as.character(.x[[i]]))-4)
}
....
Some more calculations....
....
},.x)
return(CombinedList)
}
}
然后我从 , 中选择,说myfunc1
and并调用我的玩具函数:myfunc2
parent function
try = Myfunction(x,y,z,thelist)(myfunc1,myfunc2)
这是一个玩具函数,我的真实函数要长得多,计算起来也需要很多时间。我猜问题在于子函数内部的 for 循环——可能是我使用的eval
.
这个函数需要更长的时间来计算,然后是另一个类似的函数,它的不同之处在于我在继续执行子函数之前调用了父函数中的所有函数,function(...){
. 不要选择这个玩具示例中的功能。
还有其他更快的方法吗?