data.frame ( x) とcolumnそこから a を受け入れる関数を作成しようとしています。この関数は x に対していくつかの計算を実行し、後で別の data.frame を返します。列名を関数に渡すためのベストプラクティスの方法にこだわっています。
以下の 2 つの最小限の例fun1では、例としてを使用して、fun2に対して操作を実行でき、目的の結果が得られます。ただし、どちらも一見(少なくとも私にとっては)エレガントではないことに依存していますx$columnmax()
- に電話し
substitute()、おそらくeval() - 列名を文字ベクトルとして渡す必要性。
fun1 <- function(x, column){
do.call("max", list(substitute(x[a], list(a = column))))
}
fun2 <- function(x, column){
max(eval((substitute(x[a], list(a = column)))))
}
df <- data.frame(B = rnorm(10))
fun1(df, "B")
fun2(df, "B")
fun(df, B)たとえば、関数を として呼び出すことができるようにしたいと思います。私が検討したが試していない他のオプション:
column列番号の整数として渡します。これで回避できると思いますsubstitute()。理想的には、関数はどちらかを受け入れることができます。with(x, get(column))、しかし、それが機能したとしても、これにはまだ必要だと思いますsubstituteformula()とを利用match.call()します。どちらもあまり経験がありません。
サブ質問:do.call()より優先されeval()ますか?