我是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。
萨米特
答案 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...} )