R言語substitute

3236 ワード

R言語substitute
来た:http://www.biosino.org/R/R-doc/R-lang/Substitutions.html#Substitutions
実際には、前のセクションに言及したように、表式の内部構造を修正することはめったにない.最も一般的なのは、ユーザーが簡単に表現を得て、それを分析し、図形をマーキングするというようなことです.このような例は、plot.default実装コードの開始部分として見られ得る.
     xlabel if (!missing(x))
         deparse(substitute(x))
これにより、plotのxパラメータ変数または表式は、次にx軸をマーキングするために使用されます.
この要求を実現するのは関数substituteです.式xを得て、形式パラメータxを通して伝達される式を置換します.このような動作を保証するためには、xはその値を生成する表式の情報を持たなければならない.これはRののんびりした価値を求める構造と関係があります.一つの形式パラメータは事実上許容されており、オブジェクトには三つの溝変数があり、一つはその表現を定義するためのもので、一つは表式の求値に用いる環境であり、もう一つは式の求値結果に用いるものである.substituteは、許容変数を識別し、その表現スロット変数の値を置換します.substituteが1つの関数の内部で呼び出されると、この関数の局所変数も置換によって支配される.
substituteのパラメータは単純な識別子である必要はなく、複数の変数を含む表現であっても良い.このとき、どの変数も置換されます.同様に、substituteには、変数が検索できる環境またはリストである追加のパラメータがあります.たとえば:
  substitute(a + b, list(a = 1, b = quote(x)))
  # 1 + x
参照はx置換に必要です.このような構造は図に数学式を追加するのに便利です.下記のコードで示します.
      plot(0)
      for (i in 1:4)
        text(1, 0.2 * i,
             substitute(x[ix] == y, list(ix = i, y = pnorm(i))))
注意すべきは、置換は純粋な語法で実現されることである.値を求められたら、結果を呼び出したオブジェクトの意味を検証しません.substitute(x 2 。 , R , 。 , “ ” , , {}>=40*” years”。 は のパラメータに して を めません.これはどのように に まれているオブジェクトを するかという をもたらします. を する は のようにsubstituteをもう います.
     > expr  substitute(substitute(e, list(x = 3)), list(e = expr))
     substitute(x + y, list(x = 3))
     > eval(substitute(substitute(e, list(x = 3)), list(e = expr)))
     3 + y
の なルールは の りです. のパラメータの ツリーの と のパラメータのマッチングは、ラベル きのリストでもあり、 のフレームでもあります. なローカルオブジェクトであれば、グローバル と しない り、その が されます. が されます.シンボルがマッチしていない は、 の もありません. レベルでの は が ないです.1これはSから されたもので、 には がそのレベルで されていて、 が もよく、かつ、 されていない.2
ローカル がsubstituteを する に される 、 のルールとS のルールは し っています.Rは の しい を しますが、Sは でない り、 にパラメータ を します.これは、Sの でf(1)とf(1)の が きいという な をもたらす.しかし、Rの はかなりはっきりしています.それにもいくつかの なものがありますが、のんびりとした を める があります. の を せよ.
 logplot 
これは に えるが、yタグはより いc(…) になっている.これは、のんびりとした を める により、y のybb の め になるからです. は、まずリロードを することです.すなわち、
 logplot 
この 、evalはあまり われないかもしれません.ybbが または オブジェクトである 、これらのオブジェクトも められます.しかし、 が されない があります. えば、 される は「loge」です.
substituteのバリエーションの つはbquotであり、それはいくつかのサブ の を たちの わりにします. の は のようになります.
 > plot(0)
 > for (i in 1:4)
 +   text(1, 0.2 * i,
 +        substitute(x[ix] == y, list(ix = i, y = pnorm(i))))
もっと に いてもいいです.
 plot(0)
 for(i in 1:4)
    text(1, 0.2*i, bquote( x[.(i)] == .(pnorm(i)) ))
サブ の がその に き えられているほか、 の が されます. の なる の を するオプションのパラメータがあります.bquotの はLISPの マクロから ています.