2013-03-13 13 views
9

Ho scritto una funzione che crea grafici. Uno dei problemi che incontro è la necessità di produrre grafici riproducibili. Una soluzione è, naturalmente, salvare il codice per ogni grafico che produco (ad esempio, salvare i valori esatti che ho impostato per gli argomenti della funzione). Mi chiedo tuttavia se esiste un modo in cui posso acquisire tutti i valori di input, incluso l'oggetto dati, ecc., E salvarli in un elenco e restituirli come output. Un modo semplice per farlo, suppongo, è la seguente:R: c'è un modo per catturare tutti i valori degli argomenti delle funzioni

plot.foo <- function(x, main=NULL){ 
    plot(x, main=main) 
    list(data=x, main=main) 
} 

Tuttavia, la funzione che ho scritto ha un sacco di argomenti, oltre a un argomento puntini di sospensione (vedi sotto), quindi mi chiedo se c'è un modo più rapido per salvare tutti i valori degli argomenti di input. Grazie!

plot.foo <- function(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10,...){ 
    ... 
} 

risposta

15

Ci sono una varietà di funzioni che possono essere utili: match.call, match.arg e poi ci sono metodi specifici per l'estrazione dei ... argomenti.

plot.foo <- 
    function(x, main=NULL){ 
    cl <- match.call() 
    print(cl) 
    plot(x, main=main) 
    list(data=x, main=main) 
    } 

plot.foo(1) 
## plot.foo(x = 1) 
## $data 
## [1] 1 
## 
## $main 
## NULL 

plot.foo <- 
    function(x, main=NULL, ...){ 
    extras=list(...) 
    print(extras) 

    cl <- match.call() 
    print(cl) 

    plot(x, main=main) # this would actually produce the grapjic 
    list(data=x, main=main, extras=extras) # this returns the arguments as a list 
    } 

plot.foo(1, sthg="z") 
## $sthg 
## [1] "z" 

# You could assign the returned list to a name or you could `save` to a file 
plot.foo(x = 1, sthg = "z") 
## $data 
## [1] 1 
## 
## $main 
## NULL 

C'è anche la funzione sys.call il cui esito potrebbe essere restituito come testo con deparse.

5

Fin dall'inizio, fare una lista denominata di tutti i tuoi argomenti trama

L <- list(x=data, main="string", ylim=c(0,10)) 

Poi trama utilizzando tale oggetto come l'insieme di parametri

do.call("plot", L) 

Assicurati di salvare L per uso successivo.

esempio di lavoro:

L<-list(x=1:10, y=(1:10)^2, main="Y by X",type="l",xlab="X",ylab="Y") 
do.call("plot",L) 
Problemi correlati