说我有一个功能:
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
选择myfunc2
和parent function
,然后调用我的玩具函数:
try = Myfunction(x,y,z,thelist)(myfunc1,myfunc2)
这是一个玩具功能,我的实际功能要长得多,需要花费大量时间来计算。我想问题在于子函数内部的for循环 - 可能是我对eval
的使用。
这个函数需要更长的时间来计算另一个类似的函数,这个函数只是在我继续使用子函数function(...){
之前调用父函数中的所有函数。而不是选择这个玩具示例中的功能。
还有其他更快捷的方法吗?