2013-03-13 2 views
9

플롯을 만드는 함수를 작성했습니다. 내가 만나는 문제 중 하나는 재현 가능한 그래프를 생성해야한다는 것입니다. 한가지 해결책은 내가 만드는 각 플롯에 대한 코드를 저장하는 것입니다 (즉, 함수 인수에 대해 설정 한 정확한 값을 저장하는 것). 그러나 데이터 객체 등을 포함한 모든 입력 값을 캡처하여 목록에 저장하고 출력으로 반환 할 수있는 방법이 있는지 궁금합니다. 이있는 경우 그러나, 내가 쓴 함수가 생략 인수 외에 인수의 무리를 가지고 R : 모든 함수 인수 값을 캡처하는 방법이 있습니까

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

(아래 참조), 그래서 나는 궁금 : 간단한 방법은 다음과 같다, 그것은, 내가 생각해야 할 일 모든 입력 인수 값을 저장하는 더 빠른 방법입니다. 감사!

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

답변

15

: match.call, match.arg 다음 ... 인자를 추출하기위한 구체적인 방법이있다.

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 

그 결과 deparse과 텍스트로 반환 될 수있는 sys.call 기능도 있습니다.

5

, 모든 플롯

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

그런 다음 매개 변수의 집합으로 해당 객체를 사용하여 플롯 인수

do.call("plot", L) 

에 대한 L을 저장해야합니다의 이름 목록을 나중에 사용하십시오.

동작 예 :

유용 할 수있는 다양한 기능이있다
L<-list(x=1:10, y=(1:10)^2, main="Y by X",type="l",xlab="X",ylab="Y") 
do.call("plot",L) 
관련 문제