setClass使表示成为任何类

时间:2012-06-21 18:43:48

标签: r s4

是否有某种方法可以让我的某个课程中的某个插槽任何类?

,比如

  

setClass(“myClass”,representation(A =“any”))

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

3 个答案:

答案 0 :(得分:1)

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

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"

答案 1 :(得分:1)

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

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

如果您希望character但希望同时允许NA,这会很有用。我知道这不是'任何',但也许你可能想限制它,但不是单一模式。

答案 2 :(得分:1)

您可以使用“ANY”。

> 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>