我正在尝试使用自定义类构建器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")
任何想法如何让它正确传递火车类型的对象?谢谢!
答案 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)。