web-dev-qa-db-ja.com

Rのaesとaes_string(ggplot2)の違いは何ですか

インフォマティクスの背景が不足しているため、ggplot2のaesaes_stringの違いと日常の使用への影響を理解するのが困難です。

説明(?aes_string)から、両方のdescribe how variables in the data are mapped to visual properties (aesthetics) of geomを理解することができました。

さらに、aes uses non-standard evaluation to capture the variable names.aes_stringを使用するのに対し、regular evaluationa list of unevaluated expressionsを使用すると言われています。

サンプルコードから、両方が同じ出力(> aes_string(x = "mpg", y = "wt") List of 2 $ x: symbol mpg $ y: symbol wt > aes(x = mpg, y = wt) List of 2 $ x: symbol mpg $ y: symbol wt )を生成することは明らかです。

__コード__

Non-standard evaluationHadley Wickhamの著書Advanced R によって、関数の引数の値を呼び出すだけでなく、また、それらを生成したコード。

反対のregular evaluationは関数から値を呼び出すだけだと思いますが、この仮定を確認するためのソースが見つかりませんでした。さらに、これら2つの違いと、パッケージを使用するときにこれが私に関連する理由がわかりません。

inside-Rウェブサイトaes_string is particularly useful when writing functions that create plots because you can use strings to define the aesthetic mappings, rather than having to mess around with expressions.

しかし、その意味では、なぜ私がaesを使用し、aes_stringを使用するたびに常にggplot2を選択する必要がないのかがわかりません...その意味で、これらの概念に関するいくつかの説明と実用的なヒントを見つけるのに役立ちます毎日の使用のため。

15
joaoal

aesは、引用符を必要としないため、入力を節約できます。以上です。もちろん、いつでもaes_stringを自由に使用できます。プログラムで変数名を渡す場合は、aes_stringを使用する必要があります。

内部的には、aesは非標準の評価にmatch.callを使用します。説明のための簡単な例を次に示します。

fun <- function(x, y) as.list(match.call())
str(fun(a, b))
#List of 3
# $  : symbol fun
# $ x: symbol a
# $ y: symbol b

比較のために:

library(ggplot2)
str(aes(x = a, y = b))
#List of 2
# $ x: symbol a
# $ y: symbol b

シンボルは後の段階で評価されます。

aes_stringparseを使用して同じことを実現します。

str(aes_string(x = "a", y = "b"))
#List of 2
# $ x: symbol a
# $ y: symbol b
14
Roland