如何使用省略号在 R 的另一个环境中传递参数和求值
How to use ellipsis to pass arguments and evaluate in another environment in R
我正在尝试将大量参数传递给一个函数(实际上它是一个引用 class 初始化函数)。我正在考虑使用三点省略号将参数传递给 class 初始值设定项,但它不起作用。这是我的示例代码:
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"))
我不确定如何评估一堆参数来初始化引用 class?请分享您的想法;提前致谢!
您真的需要延迟评估参数吗?好像
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)
效果会更好。如果要扩展 class 调用的参数,则需要使用 do.call
调用该调用,而不仅仅是参数。
我正在尝试将大量参数传递给一个函数(实际上它是一个引用 class 初始化函数)。我正在考虑使用三点省略号将参数传递给 class 初始值设定项,但它不起作用。这是我的示例代码:
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"))
我不确定如何评估一堆参数来初始化引用 class?请分享您的想法;提前致谢!
您真的需要延迟评估参数吗?好像
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)
效果会更好。如果要扩展 class 调用的参数,则需要使用 do.call
调用该调用,而不仅仅是参数。