の列名であるタイプmyfunction(y,data)
の関数を書きたいと思います。それを呼び出すときに式を使用できるようにするために、それをコーディングする方法について何か考えはありますか?y
data
myfunction(y~,data=mydata)
data$y
また、関数内でフォームの何かを使用するにはどうすればよいですか?
単一の列名を引用符で囲まれていない文字列として渡すだけでよい場合は、次を使用します。
myfunction <- function(y, data)
{
colname <- as.character(substitute(y))
data[, colname]
}
例:
myfunction(mpg, mtcars)
列の選択は、ドル記号ではなく角括弧で行うことに注意してください。これは、$
が引数を評価せず、 という名前の列を探すため"colname"
です。
これy~
は有効な数式構文ではありませんが、問題ありませんy~.
。それを使用して:
1)これを試してください:
myfunction <- function(y, data) {
if (inherits(y, "formula")) y <- all.vars(y)[1]
data[[y]]
}
2) または S3 ディスパッチを使用したこのより拡張可能なバージョン:
# generic
myfunction <- function(y, data) UseMethod("myfunction")
# formula method
myfunction.formula <- function(y, data) {
y <- all.vars(y)[1]
NextMethod()
}
# default method
myfunction.default <- function(y, data) data[[y]]
テストしてください (どちらのソリューションでも同じ結果が得られるはずです)。
> myfunction(demand ~ ., BOD)
[1] 8.3 10.3 19.0 16.0 15.6 19.8
> myfunction("demand", BOD)
[1] 8.3 10.3 19.0 16.0 15.6 19.8
これも機能します:
> myfunction(~ demand, BOD)
[1] 8.3 10.3 19.0 16.0 15.6 19.8