2017-09-15 19 views
1

我試圖訪問summary.lm類的內容時,發現存在問題,其中lmplyr函數的等級因子水平不同。

舉個例子,我運行類似:

sum = dlply (mtcars, .(cyl), lm, formula = mpg ~ wt) %>% 
    llply(summary) 

這給出了由cyl變量的水平分別做了迴歸的摘要。

現在,如果我想獲得係數例如,很容易與llply (sum,coefficients),但有時這是不可能的。在這個例子中,如果我想在summary.lm對象內獲得fstatistic元素,我唯一的機會就是手動編寫像sum$'4'$fstatistic這樣的東西,因爲沒有特定的函數可以從這個類中獲得F統計量。

然後,需要使用運營商$或類似功能的方式。請注意,上面的代碼只是一個例子。我在這裏試圖完成的是通過使用$運算符從plyr's函數的輸出中選擇對象中的元素,如summary.lmdataframe

+1

怎麼樣'dlply(mtcars。(CYL),LM,公式= MPG〜重量)%> % llply(摘要)%>%\'$ \'(\'4 \')%>%\'$ \'(fstatistic)' – G5W

+0

這很好。有沒有一種方法可以將它推廣到「cyl」因子的每個級別? – EuGENE

回答

1

您可以將$作爲函數使用,方法是將其封閉在反引號中。

dlply (mtcars, .(cyl), lm, formula = mpg ~ wt) %>% 
    llply(summary) %>% `$`(`4`) %>% `$`(fstatistic) 
    value numdf dendf 
9.316233 1.000000 9.000000 

如果你想將它應用到的cyl各級你可以使用sapply

dlply (mtcars, .(cyl), lm, formula = mpg ~ wt) %>% 
    llply(summary) %>% sapply(function(x) `$`(x, fstatistic)) 
      4  6   8 
value 9.316233 4.337245 8.795985 
numdf 1.000000 1.000000 1.000000 
dendf 9.000000 5.000000 12.000000 
+0

非常聰明,謝謝! – EuGENE