の一部の関数は引数としてRa を取ることができますが、(文字列として引用する必要なく)のdata.frameを取ることができる別の引数があります。namesdata.frame
この具体例はqplot、ggplot2パッケージ内の関数です。
myDF <- data.frame(values=rnorm(5*2), group=c(rep("A", 5), rep("B", 5)))
qplot(values, data=myDF, colour=group, geom="density")
qplotの列であることを取得valuesしgroupて知ることができますmyDF。
ここで、プロットの前に何らかの前処理を行うラッパー関数を書きたい場合、その機能が失われます。
# A silly example. But lets assume our dataframe has more than 1 group column
silly.wrapper <- function(dataframe, colour) {
dataframe$values <- dataframe$values*2
qplot(values*2, data=dataframe, geom="density", colour=colour)
}
今私が呼び出しsilly.wrapperてそれを与えようとするcolour=groupと、オブジェクトグループが宣言されていないというエラーがスローされます(予想どおり):
# We have to call print because its a lattice plot so returned qplot won't render
# otherwise. Removing call to print still results in the same error.
print(silly.wrapper(myDF, colour=group))
Error in eval(expr, envir, enclos) : object 'group' not found
In addition: Warning message:
In eval(expr, envir, enclos) : restarting interrupted promise evaluation
私も使ってみました...:
silly.wrapper <- function(dataframe, ...) {
dataframe$values <- dataframe$values*2
qplot(values*2, data=dataframe, geom="density", ...)
}
しかし、同じエラーメッセージが表示されます。
qplotこれは、より一般的な質問につながります:オブジェクトの存在を後でチェックしない、つまり、データフレームの列としてアクセスする のような関数をどのように作成するのですか?