2017-09-15 48 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