从r中的列表列中提取模型的属性

从r中的列表列中提取模型的属性,r,dplyr,purrr,R,Dplyr,Purrr,我的数据有点复杂,所以我用mtcars数据集来说明我的问题。 对4cyl汽车进行lm,否则进行glm。将模型保存在名为“模型”的列中。 现在我试图提取模型类并将它们放在另一列中 mtcars %>% group_by(cyl) %>% do (model = if (mean(.$cyl)==4) lm(mpg~wt, data=.) else glm(vs~wt, data=., family='binomial')) %>% mutate(model.c

我的数据有点复杂,所以我用mtcars数据集来说明我的问题。 对4cyl汽车进行lm,否则进行glm。将模型保存在名为“模型”的列中。 现在我试图提取模型类并将它们放在另一列中

mtcars %>% group_by(cyl) %>% 
    do (model = if (mean(.$cyl)==4) lm(mpg~wt, data=.) else glm(vs~wt, data=., family='binomial')) %>% 
    mutate(model.class=attributes(model)$class)
我得到的是下面的错误消息:

Error in mutate_impl(.data, dots) : Column `model.type` must be length 1 (the group size), not 2
有人能帮我吗?非常感谢。

使用
class()
函数比自己钻研属性要好。因为一个对象可以有多个类,所以新列也需要是一个列表

mtcars %>% group_by(cyl) %>% mtcars %>% group_by(cyl) %>% 
    do (model = if (mean(.$cyl)==4) lm(mpg~wt, data=.) else glm(vs~wt, data=., family='binomial')) %>% 
    mutate(model.class = list(class(model)))

这里是另一个使用
map
功能从
purr
包中提取
class
信息的选项

mtcars %>% 
  group_by(cyl) %>% 
  do (model = if (mean(.$cyl)==4) lm(mpg~wt, data=.) else glm(vs~wt, data=., family='binomial')) %>% 
  ungroup() %>%
  mutate(model.class = map(model, class))

# A tibble: 3 x 3
    cyl     model model.class
  <dbl>    <list>      <list>
1     4  <S3: lm>   <chr [1]>
2     6 <S3: glm>   <chr [2]>
3     8 <S3: glm>   <chr [2]>
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 
mtcars%>%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
do(模型=if(平均值(.$cyl)==4)lm(mpg~wt,数据=)else glm(vs~wt,数据=,系列=,二项式))%>%
解组()%>%
变异(model.class=map(model,class))
#一个tibble:3x3
cyl model.class
1     4     
2     6    
3     8    
警告信息:
glm.fit:拟合概率数值为0或1