1

カスタム クラス ビルダー setClass() を使用して、train 関数 (キャレット パッケージ) から結果を返そうとしています。

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 オブジェクトであると思われます。を使用します。これにより、S4 スロットで使用するクラスがsetOldClass("train")登録されます。trainこれは機能します:

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 Train*r*esulsts)。

于 2014-04-16T21:43:10.913 に答える