2017-02-16 7 views
1

함수에 많은 인수를 전달하려고합니다 (실제로는 함수를 참조하는 클래스입니다). 클래스 이니셜 라이저에 인수를 전달할 때 세 줄의 줄임표를 사용하려고 생각하지만 작동하지 않습니다.줄임표를 사용하여 다른 환경에서 인수를 전달하고 평가하는 방법

Error in (function (expr, envir = parent.frame(), enclos = if  (is.list(envir) || : 
    unused arguments (a = 1:3, b = pmax(2:4, 3:5), c = c("test", "test1", "test2")) 

내가 참조 클래스를 초기화하기 위해 인수 한 무리를 평가하는 방법을 잘 모르겠습니다 :

SomeClass<-setRefClass("SomeClass", 
         fields=list(a="numeric",b="numeric",c="character")) 

SomeClass_1<-setRefClass("SomeClass_1",contains="SomeClass") 

SomeClass_2<-setRefClass("SomeClass_2",contains="SomeClass") 

getExpression<-function(...){ 
    return(substitute(list(...))) 
} 

ex1<-getExpression(a=1:3,b=pmax(2:4,3:5),c=c("test","test1","test2")) 

d<-TRUE 

if(d){ 
    newclass<-SomeClass_1(do.call(eval,as.list(ex1))) 
    }else{ 
    newclass<-SomeClass_2(do.call(eval,as.list(ex1))) 
      } 

그것은 나에게 오류 메시지를 제공합니다 : 여기 내 예제 코드는? 생각을 공유하십시오. 미리 감사드립니다!

답변

1

매개 변수 평가를 지연해야합니까? 비슷한 모양입니다.

getExpression <- function(...){ 
    return(list(...)) 
} 
ex1 <- getExpression(a=1:3,b=pmax(2:4,3:5),c=c("test","test1","test2")) 
do.call("SomeClass_1", ex1) 
do.call("SomeClass_2", ex1) 

더 잘 작동합니다. 클래스 호출의 매개 변수를 확장하려면 해당 매개 변수뿐 아니라 do.call을 사용하여 호출 요구를 호출해야합니다.

+0

고마워요! 그것은 작동합니다. 그러나 표현 평가를 부패시킬 수 있는지 궁금합니다. – chl111

+0

언제 어떻게 도움이 될지 상상하기가 힘듭니다. 아마도이 솔루션이 작동하지 않는 재현 가능한 예제로 새로운 질문을 게시 할 수 있습니다. – MrFlick