在 R 中创建一个 S4 class 对象,其中一些参数使用省略号传递

Create an S4 class object in R with some of the arguments passed using the ellipsis

如何在命名参数时使用省略号传递给函数的一些参数来创建 S4 class 的新对象?

示例:

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 并遵守 class 的插槽类型/保留传递给的类型富?

newClassObj <- do.call( "new", as.list( c("Class"="myClass1", cur_args[args_to_keep] )) )

你的想法很对, 您只需正确创建传递给 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" 包装在一个列表中。