2

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

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

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 列表。

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

nodeID[[1]]@capacity[1]

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

苏米特

4

1 回答 1

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...} )
于 2013-07-21T20:29:25.763 回答