3

質問が不明な場合は申し訳ありません。お気軽に変更してください。

したがって、基本的には、関数のテキスト/文字列引数が引用符を必要としないようにする方法を見つけようとしています。

foo  = function(x, y, data){
    n1 = length(data[,x])
    n2 = length(data[,y])
    cat(n1, n1)
 }

次のコードを使用する場合

data(survey)
foo(Sex, Fold, survey)

エラーメッセージが表示されます。しかし、私が以下を使用する場合:

foo("Sex", "Fold", survey)

また

foo(1, 5, survey)

関数は私が欲しいものを私に与えるでしょう。したがって、列名を引用符で囲む必要がないように関数を作成する方法はないかと思います。ありがとう!

4

2 に答える 2

8

まあ、これはシンボルで動作します:

foo  = function(x,y, data){
    n1 <- length(eval(substitute(x),data))
    n2 <- length(eval(substitute(y),data))
    cat(n1,n2)  
}

これを引用符で囲まれた変数名と整数インデックスでも機能させたい場合は、簡単に確認xyて、最初にいくつかの単純なif-else分岐を行うことができます。

eval(substitute())ただし、イディオムの使用は危険である可能性があるという標準的な警告が付属しています。(場合によっては、どのように機能しないかを常に予測できるとは限らず、機能していないときに気付かない場合もあります。)

于 2012-10-23T22:33:38.623 に答える
0

これは、データフレームへのインデックス[]引数と関係があります。

DF [、x]と言うと、DFから選択する列をRに指示します。xがDFのリテラル列"Sex"の場合、ベクトルにあるすべての列が必要であることをRに通知しますDF$Sex

したがって、「Sex」/「Fold」またはを使用する場合1,5、関数はそのままである必要があります。Sexとを使用する場合Fold、関数は次のようになります。

foo = function(x,y,data){
n1 <- length(x)
n2 <- length(y)
cat(n1,n2)
}
于 2012-10-23T22:35:48.280 に答える