関数があるとします:
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
とを選択し、toyfunction を呼び出します。myfunc2
parent function
try = Myfunction(x,y,z,thelist)(myfunc1,myfunc2)
これはおもちゃの関数であり、私の実際の関数はもっと長く、計算に多くの時間がかかります。問題は子関数内の for ループにあると思います - おそらくeval
.
この関数は、子関数function(...){
. そして、このおもちゃの例のように関数を選択しないでください。
他にもっと速い方法はありますか?