2013-07-24 34 views
19

在上交叉驗證一個thread,我做了如下評論:

我懷疑這實際上是關於與S3類(即通過$訪問)& S4類工作 之間的差別的R問題(即 通過@被訪問)...

@Gavin辛普森隨後評論道:

@gung是不是有可能現貨比較多,但解決辦法可能是到 鑽研對象和撕裂了,你覺得什麼,但要學會用 提取功能,在這種情況下​​或其較短的別名 coef() ,如在coef(fit)

我對此很感興趣。 爲什麼會使用coef(model)要好於model$coefficients[,1],例如?(我認識到後者是醜陋的,需要更多的打字,但我懷疑這是其原因。)如果沒有現有的提取函數(例如訪問t-統計),那麼情況如何呢?

回答

17

因爲那麼你正在使用的包的作者可以自由地改變模型對象的底層結構,而不用擔心打破每個人的代碼。

顯然這也推廣到R核心。建議使用這些提取器函數,因爲那樣你可以成爲當然它會始終返回正確的信息,即使函數作者認爲有必要在引擎蓋下方洗牌。

也許他們會向模型列表對象的其中一個元素添加更多信息,並且會改變一切的順序?你所有的代碼都會中斷。

+8

這是軟件設計中的一個常見問題,並不以任何方式特定於R. –

+0

這很有趣;我從來沒有這樣想過。謝謝。 – gung

14

另一個主要原因是你必須小心你得到的。例如,如果你做什麼,你會得到什麼

mod <- glm(y ~ x1 + x2, data = foo, family = binomial) 
mod$residuals 

?? (下面懸停答案,如果你不知道!)

你得到工作殘差這可能不是非常有用的許多人

的提取函數知道這一點,並將返回一些有用的東西或允許使用提取所搜索組件的不同方面。

我總是告訴人們我教R鍵,他們不應該使用$@除非他們非常熟悉的方法和被訪問對象,並沒有在生產代碼 - 你只是自尋煩惱,如果你做的。

+0

感謝您的提示! – gung

相關問題