2

有什么方法可以让我的一个班级成为任何班级吗?

即类似的东西

setClass("myClass", 表示(A="any"))

我试过“S4”,但这不起作用

4

3 回答 3

1

我在 Paul Gilbert 的 TSdbi 包的源代码中找到了一个很好的解决方法。

setClassUnion("OptionalChar",   c("character",   "logical"))
setClass("myClass", representation(A="OptionalChar"))

当您期望character但也希望允许时NA,这可能会有所帮助。我知道这不是“任何”,但也许你可能想限制它,但不是单一模式。

于 2012-11-29T14:03:22.297 回答
1

您可以使用“任何”。

> setClass("myClass", representation(A="ANY"))
> new("myClass", A=c(1,2,3))
An object of class "myClass"
Slot "A":
[1] 1 2 3
> new("myClass", A=unique)
An object of class "myClass"
Slot "A":
function (x, incomparables = FALSE, ...) 
UseMethod("unique")
<bytecode: 0x00000000071a8270>
<environment: namespace:base>
于 2013-01-28T14:03:03.243 回答
1

如果您创建通用 S4 函数,您应该能够将方法参数的可接受签名设置为“ANY”。我不确定表示是否可以设置为“任何”,因为我对表示的看法比这更具体。未分配签名的参数确实会记录在“ANY”类中。您可以使用“向量”类型作为可以接受列表或原子对象的表示形式:

setClass("myClass", representation(A="vector"))
[1] "myClass"
> new("myClass", A=list(a=c(2,3,4), b="a")  )
An object of class "myClass"
Slot "A":
$a
[1] 2 3 4

$b
[1] "a"

我不确定这是否像您要求的那样通用,但您也没有说任何关于需要属性的内容。我认为向量可能会丢失属性,但似乎没有:

> setClass("myClass", representation(A="vector"))
[1] "myClass"
> new("myClass", A=B  )
An object of class "myClass"
Slot "A":
$a
[1] 2 3 4

$b
[1] "a"

attr(,"myattr")
[1] "test"
于 2012-06-21T19:59:36.463 回答