2010-04-26 5 views
5

Dire che mi è stata consegnata una funzione che non posso cambiare e che devo usare così com'è. Questa funzione accetta diversi oggetti sotto forma dicome eseguire il wrapping di una funzione che accetta solo singoli elementi per farlo prendere una lista

oldFunction(object1, object2, object3, ...) 

dove ... sono altri argomenti. Voglio scrivere un wrapper per prendere una lista di oggetti. La mia idea era questa.

sjb.ListWrapper <- function(myList,...) { 
    lLen <- length(myList) 
    myStr <- "" 
    for(i in 1:lLen) { 
    myStr <- paste(myStr, "myList[[", i , "]],",sep="") 
    } 

    myCode <- paste("oldFunction(", myStr, "...)") 
    eval({myCode}) 
} 

Tuttavia, il problema è che voglio usare questo da Sweave e ho bisogno l'uscita di oldFunction da stampare. Qual è il modo giusto per farlo?

Grazie.

risposta

12

Stai cercando do.call:

f <- function(x,y,z)x+y+z 
do.call(f,list(1,2,3)) 
[1] 6 
+0

Grazie. Non c'è bisogno di reinventare la ruota allora. :) – stevejb

Problemi correlati