1

我正在尝试使用自定义类构建器 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")  

知道如何让它正确传递类型 train 的对象吗?谢谢!

4

1 回答 1

2

我怀疑 的返回值caret::train不是 S4 对象,而是 S3 对象。Use 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 插槽工作而这样做。

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

于 2014-04-16T21:43:10.913 回答