2017-08-11 7 views
0

私のデータは少し複雑です。私は私の問題を説明するためにmtcarsデータセットを使用しています。 それ以外の場合は4cyl carとglmを実行します。モデルを 'model'という列に保存します。 今私は、モデルクラスを抽出し、別の列に配置しようとしています。私が得たものrのリスト列からモデルの属性を抽出します

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 

誰もがそれで私を助けることができますか?どうもありがとう。

答えて

1

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))) 
0

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 
関連する問題