ファンクションにパラメータを渡そうとするとエラーが発生します。類似コードは、例えば、geom_text
)。ここでは例です:ggplot2:関数の引数をハードコードではなくパラメータとして渡そうとすると、stat_summaryがエラーをスローする
# Fake data
set.seed(5)
dat = data.frame(group=rep(c("A","B"),each=10), val=rnorm(20))
私たちは、パラメータを使用して、値ラベルの小数点以下の桁数を設定しようとするのではなく、それをハードコーディングします:evalの中
places = 2
ggplot(dat, aes(group, val)) +
stat_summary(fun.y=mean, geom="text", aes(label=round(..y.., places)))
エラー(exprの、envir、enclos):オブジェクト 'places'が見つかりません。
次の2つの例はうまくいきます。
ggplot(dat, aes(group, val)) +
stat_summary(fun.y=mean, geom="text", aes(label=round(..y.., 2)))
ggplot(dat, aes(group, val)) +
geom_text(aes(label=round(val, places)))
ggplot関数を記述しようとしているときに私はこの問題に遭遇しました。最初は私は問題が関数環境からパラメータを取得していないggplotと考えていましたが、上記の例ではそれが問題ではないことが示唆されています。完全性のために、関数の簡単な例とエラーメッセージを以下に示します。 places
パラメータを渡そうとするのではなく、数字の引数をround
にハードコードすると、この関数が正常に機能します。 evalの中
pp1 = function(data, group, var, places=2, e=1.5) {
ggplot(data, aes_string(group, var)) +
geom_boxplot() +
stat_summary(fun.y=mean, geom="text", aes(label=round(..y.., places))) +
scale_y_continuous(limits = e * range(data[,var]))
}
pp1(dat, "group","val")
エラー(exprの、ENVIR、enclos):オブジェクトの場所は「私は私が何か間違ったことをやっているかどうかを確認するために願っています
を見つけていないとどのように私ができます所望の挙動を得る。
私はR
3.2.3とggplot2
2.1.0をOS X 10.10.5上で実行しています。
NSEの問題のようです。あなたは 'eval(substitute(... ggplot code ...、list(places = places)))')を呼び出すことでそれを避けることができますが、よりよい方法があるかもしれません。 – alistaire
それは動作します。それを回答として追加してください。'stat_summary'の中でなぜそれが起こっているのか知っていますか? – eipi10
わかりません。これは、エースのNSEがどのように機能するかについてのものです。多分、それは '..y..'によってスイッチオンされるでしょうか? 'aes_'というSEバージョンがありますが、' ..y..'引数をどのように取得するのかは分かりません。私は上記と何か他の何かを答えを投稿します。 – alistaire