0

の一部の関数は引数としてRa を取ることができますが、(文字列として引用する必要なく)のdata.frameを取ることができる別の引数があります。namesdata.frame

この具体例はqplotggplot2パッケージ内の関数です。

myDF <- data.frame(values=rnorm(5*2), group=c(rep("A", 5), rep("B", 5)))
qplot(values, data=myDF, colour=group, geom="density")

qplotの列であることを取得valuesgroupて知ることができます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これは、より一般的な質問につながります:オブジェクトの存在を後でチェックしない、つまり、データフレームの列としてアクセスする のような関数をどのように作成するのですか?

4

0 に答える 0