关于在R中使用S4方法的问题

时间:2013-12-20 22:27:56

标签: r oop s4

我们尝试使用S4方法在R中编写面向对象编程。在编程过程中,我们遇到了一些问题。显然,在互联网上使用S4方法并没有很好的记录,因此我们希望我们能够在这里得到一些问题的答案。

第一个问题:

我们试图制作一个空的S4对象的矢量/数组/列表。搜索互联网让我们在这个论坛上提出了以下问题:

Create a vector of empty S4 objects

在上述问题的一个答案中描述的(类似地),我们使用以下代码来创建空S4对象的列表:

setClass("Name", representation(pos_x = "numeric", pos_y = "numeric", found = 
"logical"), prototype(found = FALSE))

newList <- lapply(rep("Name", 2), new)

这完全没问题。但是,当我们尝试调用S4方法的一个槽(一个变量)时,这将不起作用。例如,当我们想要调用插槽“pos_x”时,以下代码

newList[1]@pos_x

无效。我们收到的错误消息是“试图从没有插槽的基本类(”列表“)的对象中获取插槽pos_x。 因此,似乎插槽没有分配给S4方法,尽管它们在列表中已明确定义。

有谁知道我们如何从列表中的一个S4方法/对象调用一个插槽?

第二个问题:

我们想测试上面列表中的一个元素是否等于“NULL”,因为我们希望稍后创建对象。

为了检查这一点,我们尝试了:

newList[1] == NULL 

然而,这仅导致“逻辑(0)”。 有谁知道如何做到这一点?

非常欢迎建议,评论和问题。

非常感谢!

1 个答案:

答案 0 :(得分:1)

问题可能是由于使用了[而不是[[

命令newList[1]返回长度为1的列表,而命令newList[[1]]返回列表的元素。因此,您应该尝试:

newList[[1]]@pos_x