我们尝试使用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)”。 有谁知道如何做到这一点?
非常欢迎建议,评论和问题。
非常感谢!
答案 0 :(得分:1)
问题可能是由于使用了[
而不是[[
。
命令newList[1]
返回长度为1的列表,而命令newList[[1]]
返回列表的元素。因此,您应该尝试:
newList[[1]]@pos_x