2014-04-16 68 views
0

我正在嘗試使用自定義類生成器setClass()從火車函數(插入符號包)返回結果。試圖使用setClass從「火車」類型的插入符號傳遞火車功能

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

這是我創造我的功能TrainResults:

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

「successrate」 工作正常,因爲它是數字式的,但plsFit(這類列車的{插入符})抱怨說:

​​

任何想法如何讓它正確地傳遞類型的對象?謝謝!

+0

你運行過'require(caret)'或'library(「caret」)嗎? – stanekam

+0

是的,我有。我應該補充說,當我簡單地從函數返回plsFit時,一切正常,所以問題不在於plsFit對象,而是以我初始化setClass(我認爲)的方式。謝謝! – amunategui

+1

當您返回'plsFit'對象並調用'class()'時,返回的是什麼? – stanekam

回答

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插槽工作。

請注意,您的代碼中還有一個錯字(小寫R在Train*r*esulsts中)。