在命名参数时,如何使用省略号传递给函数的一些参数创建S4类的新对象?
示例:
foo <- function(a, ...){
cur_args <- lapply(match.call(expand.dots=TRUE)[-1], deparse)
args_to_keep <- names(cur_args) %in% slotNames("myClass1")
newClassObj <- new("myClass1", what can go here??? )
}
有什么方法可以使用 do.call 并遵守类插槽的类型/在传递给foo时保留其类型?
newClassObj <- do.call( "new", as.list( c("Class"="myClass1", cur_args[args_to_keep] )) )
答案 0 :(得分:0)
您有正确的主意,
您只需创建正确传递给new
的参数列表即可:
setClass("A", slots=c(x="numeric"))
foo <- function(...) {
dots <- list(...)
valid_slots <- dots[intersect(names(dots), slotNames("A"))]
do.call(new, c(list(Class="A"), valid_slots))
}
> foo(x=1, y=2)
An object of class "A"
Slot "x":
[1] 1
c
可用于将列表相互追加,
因此,您只需要将Class="A"
包装在列表中即可。