2017-02-21 6 views
0

関数内の変数名の入力を扱う方法について知りたいと思います。例えば、私はこのような機能を書かれている:入力変数名の扱いについてR

dataframeは、入力データフレームである
bin_multi <- function(y, dataframe, sel = NULL){ 
    if(!is.null(sel)) { 
    dataframe <- dataframe[,sel]} 
    else { 
    dataframe <- dataframe[!y]} 
} 

yは、データフレーム内のターゲット変数であり、selは、例えば、sel = c(1,2,3)dataframeから列を選択することです。

この機能の目的は、単に、所与seldataframeのサブセットを取り、selが与えられていない場合、dataframeからyを目的変数を排除することです。

私の質問は、この機能でyにどうすればいいですか?入力では、yが変数の名前です。 deparse()でこの問題を解決できますか?

ありがとうございます。

+0

yを文字ベクトルとして入力し、次に 'grep'または' grepl': 'dataframe < - dataframe [!grepl(y、names(dataframe)、fixed = TRUE)]'を使用します。 – lmo

+0

@lmoありがとう!しかし、文字としてyを入力しない場合は?これは完全な関数のほんの一部であり、yが文字として入力された場合、それは残りの部分でより扱いにくくなります。 – user95902

+1

どのように扱いにくくなるのかは不明ですが、関数の先頭にyのコピーを作成し、これをmyY < - dataframe [、y] 'に使用するのが簡単な解決策です。次に、コード内でyをmyYに置き換えます。 – lmo

答えて

0

私はこれがうまくいくと思う:文字列にあなたのオブジェクト名をオンにするthis answerに図面の

bin_multi <- function(y, dataframe, sel = NULL){ 

    if(!is.null(sel)) { 

    dataframe <- dataframe[,sel] 

    } else { 

    dataframe <- dataframe[,which(names(dataframe) != deparse(substitute(y)))] 

    } 

} 

+0

ありがとう!私は 'deparse(substitute(y))'を持っていましたが、 'y 'を含まない' which(names(。))'は使用しませんでした。これはまさに私がそれを働かせたいのです! – user95902

関連する問題