创建预定义S3对象的列表

时间:2016-02-27 15:36:56

标签: r list oop object store

我正在忙着比较R中的不同机器学习技术。情况就是这样:我制作了几个函数,以自动方式创建每个不同的预测模型(例如:逻辑回归,随机森林,神经网络) ,混合集合等),预测,混淆矩阵,几个统计(例如AUC和Fscore),以及不同的情节。

我设法创建了一个能够存储所需数据的S3对象。 但是,当我尝试创建一个已定义对象的列表时,这会失败,并且所有数据都按顺序存储在一个大列表中。

这是我的S3对象(因为这是我第一次创建S3,我不确定代码是100%正确):

modelObject <- function(modelName , modelObject, modelPredictions , rocCurve , aUC , confusionMatrix )
{

  modelObject <- list(
    model.name = modelName,
    model.object = modelObject,
    model.predictions = modelPredictions,
    roc.curve = rocCurve,
    roc.auc = aUC,
    confusion.matrix = confusionMatrix

  )

  ## Set the name for the class
  class(modelObject) <- "modelObject"
  return(modelObject)
}

在每个机器学习功能结束时,我定义并返回对象: 缩短的例子:

NeuralNetworkAnalysis<- function() {
  #I removed the unnecessary code, as only the end of the code is relevant
  nn.model <- modelObject(modelName = "Neural.Network" , modelObject = NN , modelPredictions = predNN , rocCurve = roc , aUC = auc , confusionMatrix = confu  )
 return(nn.model)
  }

最后,在我的脚本&#39;函数,我创建一个空列表,并尝试追加不同的对象

 #function header and arguments before this part are irrelevant

# Build predictive model(s)
  modelList = list("model" = modelObject)
  modelList <- append(modelList ,   NeuralNetworkAnalysis())
  modelList <- append(modelList,  RandomForestAnalysis())
  mod <<- RandomForestAnalysis() #this is to test what the outcome is when I do not put it in a list
  return(modelList) } #end of the function ModelBuilding
models <- ModelBuilding( '01/01/2013'  , '01/01/2014'  ,  '02/01/2014' ,  '02/01/2015' )

现在,当我查看模型列表时,我没有对象列表,我只有一个列表,其中包含每个算法的所有数据。

  
    

class(models)[1]&#34; list&#34;

         

class(mod)[1]&#34; modelObject&#34;

  

如何解决此问题,以便我可以拥有一个包含例如:

的列表
  

列出$ random.forest $ variable.I.want.to.access(最优惠)

  

列表[I] $ variable.of.random.forest.that.I.want.to.access

提前thx!

奥利弗

1 个答案:

答案 0 :(得分:1)

不确定我是否理解正确,但问题可能只是您的模型列表的构建方式。如果你试试

 modelList[["neural.network"]] <- NeuralNetworkAnalysis()
 modelList[["random.forest"]] <- RandomForestAnalysis()

等,是否会为您提供您正在寻找的访问方法?