2017-02-16 10 views
1

関数にかなりの引数を渡そうとしています(実際は参照クラスの初期化関数です)。私はクラスの初期化子に引数を渡すために省略記号3つを使用することを考えていますが、うまくいきません。ここに私のサンプルコードは次のとおりです。ellipsisを使用して引数を渡し、別の環境で評価する方法

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))) 
      } 

それは私にエラーメッセージを与える:

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")) 

私は参照クラスを初期化するために、引数の束を評価する方法がわからないのですか?あなたの考えを共有してください。前もって感謝します!

答えて

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

関連する問題