R中类的对象的数组/列表/集合

时间:2013-07-21 20:16:40

标签: r oop

我是R中的OOP的初学者,我遇到了一个我无法找到解决方案的问题。

我使用setClass在R中定义了一个类“node”,其中包含有关网络中“节点”的信息 -

setClass(Class = "node", 
    representation = representation(nID = "integer", links = "integer", 
        capacity = "numeric"), 
    prototype = prototype(nID = integer(1), links = integer(20), 
        capacity = numeric(20)))

我真正想要做的是创建一个包含多个“节点”的数组/列表,每个“节点”都是“节点”类。像

这样的东西
nodeID[100] <- new("node")

但这显然不起作用。我已经尝试过创建数组并将它们的类转换为“节点”,但它也没有这样做。

这将帮助我完成循环系统中所有节点的事情 -

for(i in 1:dim(nodeID))
{
    nodeID[i]@capacity <- 1000
    blah blah....
}

请注意,问题不是初始化/默认插槽的值(例如,在这种情况下是容量)。我能做到。任何帮助都会非常感激。

谢谢,

萨米特

回答----

谢谢@Ricardo和@dickoa。这就像我想要的那样创建了nodeID列表。

想要为面临同样问题的其他人添加,为了访问类“node”列表的元素/插槽,您必须使用以下内容:

nodeID[[1]]@capacity[1]

另外,我将使用lapply而不是for。

萨米特

1 个答案:

答案 0 :(得分:2)

尝试使用replicate

nodeID <- replicate(100, new("node"), simplify="list")
is(nodeID)
# [1] "list"   "vector"
is(nodeID[[1]])
# [1] "node"

使用nodeID[100] <- new("node")之类的内容无效。 (正在尝试)要做的是查找名为nodeID的对象,如果找到,请尝试将其第100个元素设置为new("node")。 例如,它不会创建一个对象nodeID并用100个元素填充它。


此外,请注意,您可以避免使用for循环,而不是使用lapply: 例如,而不是:

for(i in 1:dim(nodeID))
{
 nodeID[i]@capacity <- 1000
 blah blah....
}

使用:

lapply(nodeID, function(n) {blah balh...} )