適度に多くのパラメーター(すべて同じ長さのベクトル)を持つ関数を作成しましたが、パラメーターをデータフレームにまとめることができれば楽になると思いました。私はS3メソッドを使用してこれを達成することができましたが、S3メソッドについてもう少し読んで、関数をコーディングした方法がS3規則の乱用であるかどうか疑問に思い始めています。
私がしたことが悪い考えかどうか知りたいのですが。もしそうなら、別のアプローチを歓迎します。
これが私がしたことの簡単な例です:
myfunc <- function(x, ...) UseMethod("myfunc")
myfunc.default(time, money, age, weight) {
# a silly calculation
return(money/(age + weight) - time)
}
myfunc.data.frame <- function(params, ...) {
names(params) <- tolower(names(params))
pass.args <- intersect(names(params), names(formals(myfunc.default)))
res <- do.call(myfunc.default, c(params[pass.args], ...))
return(res)
}
次に、mydata
列名が、、、Money
のtime
データフレームがある場合、このような呼び出しを行うと、関連するデータがに渡されます。それはすべてうまくいきますが、それは賢明ですか?AGE
weight
name
myfunc(mydata)
myfunc.default