2013-03-13 5 views
9

Napisałem funkcję, która tworzy wykresy. Jednym z problemów, które napotykam, jest potrzeba tworzenia powtarzalnych wykresów. Jednym z rozwiązań jest oczywiście zapisanie kodu dla każdego tworzonego przeze mnie wykresu (tj. Zapisanie dokładnych wartości ustawionych dla argumentów funkcji). Zastanawiam się jednak, czy istnieje sposób, w jaki można przechwycić wszystkie wartości wejściowe, w tym obiekt danych, itp. I zapisać je na liście i zwrócić jako wynik. Prostym sposobem na to, jak sądzę, jest następujący:R: czy istnieje sposób przechwytywania wszystkich wartości argumentów funkcji

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

Jednak funkcja pisałem ma kilka argumentów oprócz argumentu Wielokropek (patrz poniżej), więc zastanawiam się, czy istnieje szybszy sposób na zapisanie wszystkich wartości argumentów wejściowych. Dzięki!

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

Odpowiedz

15

Istnieje wiele funkcji, które mogą być przydatne: match.call, match.arg a następnie są specyficzne metody ekstrakcji ... argumenty.

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 

Istnieje również funkcja sys.call którego wynik może być zwrócony jako tekst z deparse.

5

od początku, uczynić nazwanego listę wszystkich argumentów fabuły

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

Następnie wykreślić przy użyciu tego obiektu jako zbiór parametrów

do.call("plot", L) 

Upewnij się, aby zapisać L dla później użyć.

przykład robocza:

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