aes
括弧や引数なしで入力して、それが何をしているのかを確認してください。
function (x, y, ...)
{
aes <- structure(as.list(match.call()[-1]), class = "uneval")
rename_aes(aes)
}
引数を評価せずに引数の名前を取ります。基本的には後で名前を保存して、プロットしようとしているデータ フレームのコンテキストで名前を評価できるようにします (そのため、エラー メッセージが不平を言っていますeval
)。したがってmy.aes(x=a, y=b)
、ggplot
構築に含めると、 x
in data
--becausex
は評価されませんでしたaes(x=x, y=y)
。
で何が起こっているかについての別の考え方は、次のaes
ようなものです。
my.aes <- function(x, y) {
ans <- list(x = substitute(x), y = substitute(y))
class(ans) <- "uneval"
ans
}
plyr::.
これは上記の例で機能するはずですが、 ( と同じmatch.call()[-1]
パラダイムを使用する)の注を参照してくださいaes
。
同様のトリックは代替で実行できますが、関数を複数の方法で呼び出すことができる場合、値が正しいフレームから抽出されることを確認するのがますます難しくなります。代用のトリックは、それらを使用する関数に対してプログラムすることも困難にしますが、引用されたクラスは文字列を適切なデータ構造に変換する as.quoted.character を提供します。
my.aes
自分自身を呼び出したい場合はaes
、おそらく次のようになります。
my.aes <- function(x,y) {
do.call(aes, as.list(match.call()[-1]))
}
aes_string
Roman Luštrik が指摘した関数の例:
my.aes <- function(x,y) {
aes_string(x = x, y = y)
}
my.aes("a", "b")
ただし、この場合は呼び出しを変更する必要があります。