从同一列表的另一个元素中修改列表元素

时间:2015-02-25 18:15:45

标签: r

我想创建一个列表(基本上是一个带有自定义类的对象),它在一个元素中保存数据库,在另一个元素中保存一个函数。初始化列表后,我希望能够调用该函数并让它修改包含数据库的元素。这是我的意思的一个例子

newObject<- function(dataSet){
  rtrn <- list()
  rtrn$dataHolder <- dataSet
  rtrn$addition <- function(numberToAdd){
    rtrn$dataHolder <- rtrn$dataHolder + numberToAdd
  }
  class(rtrn) <- "customClass" 
  return(rtrn)
}

x <- newObject(c(1,2,3))
x$addition(1)

调用addition()方法实际上并没有修改dataHolder元素。我已经尝试了&lt;&lt; - 作为一个赋值运算符(因为我在函数之外修改变量),但这似乎不起作用

1 个答案:

答案 0 :(得分:0)

您的示例几乎是closure。如果你纠正了&#34;班级&#34;致:

newObject<- function(dataSet) {
  dataHolder <- dataSet
  addition <- function(numberToAdd){
    dataHolder <<- dataHolder + numberToAdd
  }
  getdata <- function() {
    dataHolder
  } 

  rtrn <- list(addition = addition, getdata = getdata)
  class(rtrn) <- "customClass" 
  return(rtrn)
}

你接近你想要的东西:

x <- newObject(c(1,2,3))
x$getdata()
[1] 1 2 3  
x$addition(1)
x$getdata()
[1] 2 3 4

由于您定义了自己的class,因此您还可以定义打印功能:

print.customClass <- function(x){ print(x$getdata()) }

看到&#34;内饰&#34;由

x
[1] 2 3 4