Rの数式描画の中で変数を展開したいときはbquoteを使う

ループを使って複数のグラフを描くような状況。

par(mfrow=c(2,2)) # 2行2列で作図する
 
for(i in 1:4){
  curve( x^i, -1, 1, asp=1, ylab="y" )
}

複数のグラフを描いてみた(タイトルなし)

グラフを区別するためにmainオプションでタイトルを付けましょう↓

par(mfrow=c(2,2))
 
for(i in 1:4){
  curve( x^i, -1, 1, asp=1, ylab="y",
         main=paste("y=x^", i) )
}

タイトルをつけてみたが格好悪い

う~ん、伝わりはするけど、"y=x^2"みたいな見た目が格好悪い。ちゃんと数式(数字の肩に指数が乗っている感じ)で表現したいですよね。

そういうときは、expression関数で、いけるかな・・・?

par(mfrow=c(2,2))
 
for(i in 1:4){
  curve( x^i, -1, 1, asp=1, ylab="y",
         main=expression(y==x^i) )
}

expressionだと変数iが展開されない

ありゃ? 数式の形にはなりましたが、変数iが展開されずそのまま「i」と出ちゃいました。

やっと本題です。

このiを展開(i = 1, 2, 3, 4)したいときには、bquote関数が使えます↓

par(mfrow=c(2,2))
 
for(i in 1:4){
  curve( x^i, -1, 1, asp=1, ylab="y",
         main=bquote(y==x^.(i)) )
}

bquoteを使えば、変数を展開できる

はい。無事、所望の表現になりました。

bquoteはexpressionと同じように数式表現を解釈してくれるのですが、ピリオドと括弧「.( )」で囲まれた部分については変数を展開してくれます。(という仕様のようです。私もそんなに使い込んだわけではないので・・・)

コメント

このブログの人気の投稿

Rのグラフで軸の目盛りの刻み幅を変更する方法

Rで繰り返しを含む数列の生成(rep関数、seq関数)

reorderを使ってggplotの棒グラフの並び順を降順にする方法