R 在S4对象中有效设置参数

R 在S4对象中有效设置参数,r,s4,R,S4,我正在用R编写一个模拟模型来跟踪一组交互代理的行为。为了我自己的理智,我给每个代理提供了它自己的S4对象,在其中我存储了它的轨迹和其他参数。目前,我将一个对象传递给一个函数,执行一些操作,然后将对象传回。比如说, #Create a new class and a sample object setClass("example", slots = list(N="numeric"), prototype = list(N=0)) agentA<-new("example") #

我正在用R编写一个模拟模型来跟踪一组交互代理的行为。为了我自己的理智,我给每个代理提供了它自己的S4对象,在其中我存储了它的轨迹和其他参数。目前,我将一个对象传递给一个函数,执行一些操作,然后将对象传回。比如说,

#Create a new class and a sample object
setClass("example", slots = list(N="numeric"), prototype = list(N=0))    
agentA<-new("example") 

#Define a function to change the value in the N slot
add_one<-function(agent){  
    agent@N<-agent@N + 1
    agent
}

#Call the function.  
agentA<-add_one(agentA)
#创建一个新类和一个示例对象
setClass(“示例”,插槽=列表(N=“数值”),原型=列表(N=0))

代理很幸运,您给出的示例将导致两个完整复制操作,效率不高。这在S4中或多或少是不可能的。这两个选项是使用参考类(R6或refClass),或者使用
Rcpp
在C(++)级别执行。谢谢,这证实了我所担心的。我对使用引用类犹豫不决,因为它们是可变的,这使得调试更加困难,但也许我必须这样做。PS如果你输入的是你的评论而不是评论(我自己不知道怎么做),我会接受你的评论作为答案。不幸的是,你给出的例子会导致两次完整复制操作,效率不高。这在S4中或多或少是不可能的。这两个选项是使用参考类(R6或refClass),或者使用
Rcpp
在C(++)级别执行。谢谢,这证实了我所担心的。我对使用引用类犹豫不决,因为它们是可变的,这使得调试更加困难,但也许我必须这样做。PS我会接受你的评论作为答案,如果你是这样输入的,而不是一个评论(不知道自己怎么做)。