2017-09-12 9 views
2

私は関数内でdplyr mutateを使用するときに標準パターンを使用しています。ここにおもちゃの例があります(ポイントを証明するだけです):突然変異のためのDplyrプログラミングパターン

myFunction = function(colname) { 
    dots <- setNames(list(lazyeval::interp(~ifelse(x>25, x*10, x/10), x = quote(colname))), "my_new_col") 
    mutate_(mtcars, .dots = dots) 
} 

私はこれを毎回入力しない関数にしました。しかしこれはむしろ冗長であり、mutate_への呼び出しをパラメータ化する簡単な方法があるかどうかはわかりません。提案?

+4

このコードで何をしようとしていますか? – useR

+0

これは単なるおもちゃの例です。私は関数内に入れてdplyrのmutateとfilterへの呼び出しをパラメータ化しようとしています。 – Sid

+0

"毎回それを入力しないようにしました"。何を正確に入力しますか?おそらく、あなたが関数に入れない例を提供することができます。あなたのおもちゃの例には 'filter'もありません – useR

答えて

0

私はあなたの関数が既存の列に基づいて新しい列を作成しようとしていると仮定しています。ここには、tidyevalアプローチを使用する関数があります。詳細については、Programming with dplyrを参照してください。

myFunction = function(df, col, new_col) { 
    col <- enquo(col) 
    new_col <- quo_name(enquo(new_col)) 

    df %>% 
     mutate(!!new_col := ifelse((!!col) > 25, (!!col) * 10, (!!col)/10)) 
} 

myFunction(mtcars, mpg, mpg_based_new_col) 
関連する問題