2017-06-27 7 views
1

私はsplit-apply-combineを行う関数を作成しようとしています。 s)がパラメータであり、 - 重要なことに、ヌル分割が許容される。たとえば、データのサブセットまたはデータセット全体の統計を実行します。巣は、()ではなく1x1のdata.frameに全体のDFを入れ子にするよりも、で巣に変数を必要とするように見えるので、 tidyr :: nest() - > purrr:map()ワークフローをグルーピングなしの特別なケースで動作させるにはvar

somedata=expand.grid(a=1:3,b=1:3) 

somefun=function(df_in,grpvars=NULL){ 

    df_in %>% group_by_(.dots=grpvars) %>% nest() %>% 
    mutate(X2.Resid=map(data,~with(.x,chisq.test(b)$residuals))) %>% 
    unnest(data,X2.Resid) %>% return() 

} 

somefun(somedata,"a") # This works 
somefun(somedata) # This fails 

ヌル条件

は失敗します。次のように私はこの問題を回避することができます。この問題を解決するために、よりエレガントな方法があるかどう

somefun2=function(df_in,grpvars="Dummy"){ 

    df_in$Dummy=1 
    df_in %>% group_by_(.dots=grpvars) %>% nest() %>% 
    mutate(X2.Resid=map(data,~with(.x,chisq.test(b)$residuals))) %>% 
    unnest(data,X2.Resid) %>% 
    select(-Dummy) %>% return() 

} 

somefun2(somedata) # This works 

はしかし、私はダミーvariabeを必要とせずに、思ったんだけど?

答えて

4

ええと、その動作は私には少し驚きです。修正はいえ簡単です:

somefun3 <- function(df_in, grpvars = NULL) { 
    df_in %>% 
    group_by_(.dots = grpvars) %>% 
    nest(everything()) %>% 
    mutate(X2.Resid = map(data, ~with(.x, chisq.test(b)$residuals))) %>% 
    unnest() 
} 
somefun3(somedata, "a") 
somefun3(somedata) 

どちらの仕事:あなただけ必ず巣everything()ようにする必要があります。

関連する問題