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



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

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;-作为赋值运算符(因为我在函数外修改变量),但这似乎也不起作用

您的示例几乎是一个闭包。如果您将您的"类"更正为:

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

既然你定义了自己的类,你也可以定义一个打印函数:

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

并通过查看"内部"

x
[1] 2 3 4

最新更新