の一部の関数は引数としてR
a を取ることができますが、(文字列として引用する必要なく)のdata.frame
を取ることができる別の引数があります。names
data.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
これは、より一般的な質問につながります:オブジェクトの存在を後でチェックしない、つまり、データフレームの列としてアクセスする のような関数をどのように作成するのですか?