1

関数があるとします:

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 を呼び出します。myfunc2parent function

try = Myfunction(x,y,z,thelist)(myfunc1,myfunc2)

これはおもちゃの関数であり、私の実際の関数はもっと長く、計算に多くの時間がかかります。問題は子関数内の for ループにあると思います - おそらくeval.

この関数は、子関数function(...){. そして、このおもちゃの例のように関数を選択しないでください。

他にもっと速い方法はありますか?

4

0 に答える 0