繁体   English   中英

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

[英]extract attributes of model from a list column in r

我的数据有点复杂,所以我使用mtcars数据集来说明我的问题。 对4cyl car做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)))

这是使用purrr包中的map函数提取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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM