如何使用省略号传递参数并在R中的另一个环境中进行评估

时间:2017-02-16 15:56:21

标签: r arguments lazy-evaluation ellipsis reference-class

我试图将相当多的参数传递给函数(实际上它是一个引用类初始化函数)。我正在考虑使用三点省略号将参数传递给类初始值设定项,但它不起作用。这是我的示例代码:

    File file = new File("download.png");
    File newfile = new File("D:\\Java.png");
    BufferedReader br=null;
    BufferedWriter bw=null;
    try {
        FileReader fr = new FileReader(file);
        FileWriter fw = new FileWriter(newfile);
        br = new BufferedReader(fr);
        bw = new BufferedWriter(fw);
        char[] buf = new char[1024];
        int bytesRead;
        while ((bytesRead = br.read(buf)) > 0) {
            bw.write(buf, 0, bytesRead);
        }
        bw.flush();
        }
        catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }

它给出了错误消息:

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 个答案:

答案 0 :(得分: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调用该调用,而不仅仅是参数。