2017-11-09 5 views
1

...引数dplyrのスタイルを使用してユーザーが複数の列を削除できるようにするにはどうすればよいですか?dplyrドット引数を使用して列を除外します

など。

mydrop=function(x,...){function body} 
mydrop(npk,N:K) 

戻り値npk[,c("block","yield")]

...引数はすべての?select_helpers関数と互換性があることが重要であることに注意してください。

答えて

2

を使用しますが、できるように使用することができ、dplyrスタイルの列選択のために要求されたOP(...)、いくつかのエラー処理も含まれます。

mydrop <- function(x,...){ 
    try(
    todrop <- x %>% 
    select(...) %>% names(.) 
    , silent = TRUE) 
    if(exists('todrop')){ 
    x %>% select(setdiff(current_vars(), todrop)) 
    }else x 
} 
+0

%x%>% select_if(!names(。)%%(select(x、...))) – akrun

1

おそらく、我々は

mydrop <- function(x,...){ 
nm <- list(...) 

if(length(nm)>0) { 
    x %>% 
    select(-one_of(unlist(nm))) 

    } else x 
} 


mydrop(npk, "N", "K") 

N:Kため@akrunと同様に再現可能な例

mydrop(mtcars, 'mpg', 'cyl') 
mydrop(mtcars) 
mydrop(mtcars, names(mtcars)[-1]) 
mydrop(mtcars, names(mtcars)) 
+0

one_ofは正確に何をしますか? ?one_ofは "one_of(...、vars = current_vars())"としか言いません。 –

+0

@DougFir '?select_helpers'によると、one_of()は文字ベクトルの変数です。 – akrun

+0

したがって、リスト内の変数の1つをランダムに選択して選択しますか? –

関連する問題