尝试使用setClass从“火车”类型的插入符号传递列车功能

时间:2014-04-16 20:25:16

标签: r r-caret s4

我正在尝试使用自定义类构建器setClass()来返回列车功能(插入符号包)的结果。

setClass(Class="TrainResults",
         representation(
                 successrate="numeric",
                 plsFit="train"
         )
)

这就是我在函数中创建TrainResults的方法:

    return(new("Trainresults",
               successrate=successrate,
               plsFit=plsFit))

“successrate”工作正常,因为它是数字类型,但是plsFit(类型为train {caret})抱怨:

Error in validObject(.Object) : 
   invalid class “Trainresults” object: undefined class for slot "plsFit" ("train")  

任何想法如何让它正确传递火车类型的对象?谢谢!

1 个答案:

答案 0 :(得分:1)

我怀疑caret::train的返回值不是S4对象,而是S3对象。使用setOldClass("train"),然后应注册train类以用于S4插槽。这有效:

setOldClass("train")
trn <- train(data.frame(x=1:3, y=1:3), 1:3)
isS4(trn)
# [1] FALSE
new("TrainResults", successrate=1, plsFit=trn)
# An object of class "TrainResults"
# ... omitted a bunch of output

基本数据类型(例如numeric等)都已预先注册为S4类,因此您无需为那些作为S4插槽的用户执行此操作。

请注意,您的代码中也有拼写错误(Train*r*esulsts中的小写字母R)。