2016-07-28 11 views
2

凡例に "R^2 = 0.00575"のような方程式を書こうとしていますが、数字0.00575を凡例に自動的に埋め込むことができます。ここに例があります。図に示すように凡例に変数を含む方程式を書くには?

enter image description here

set.seed(100) 
x=rnorm(100) 
y=1:100 
fit=lm(y~x) 
R_squared=format(summary(fit)$r.squared,digits = 3) 
plot(x,y,type="l") 
legend("topleft",legend =expression(R^{2}~"="~R_squared),bty = "n") 

、可変 "R_squared"は、式に埋め込まれていません。解決策はありますか?ありがとう。

答えて

3

このタスクでは、parse(text=sprintf(...))を実行するのが最善だと思います。 parse()を使用してR式に解析する文字列リテラルにR言語構文をコーディングし、sprintf()形式指定を使用して、変数に格納されている数値または文字列値を式に埋め込むことができます。

set.seed(100L); 
x <- rnorm(100L); 
y <- 1:100; 
fit <- lm(y~x); 
R_squared <- format(summary(fit)$r.squared,digits=3L); 
plot(x,y,type='l'); 
legend('topleft',legend=parse(text=sprintf('paste(R^2,\' = %s\')',R_squared)),bty='n'); 

==が単一の等号としてプロットされているという事実を活用して代替構文:

legend('topleft',legend=parse(text=sprintf('R^2 == %s',R_squared)),bty='n'); 

plotmath documentationを参照してください。

plot

+1

驚くほど素晴らしい回答です。私にとって、私は 'parse'関数を知らない。どうもありがとうございます。 –

+0

こんにちは、ちょうどもう1つ質問ですが、 '%s'は' text = sprintf( 'R^2 ==%s'、R_squared) 'の意味ですか?ありがとう。 –

+0

'R_squared'の値で置き換えられる文字列の書式指定です。 – bgoldst

3

またbquote使用することができます。

bquoteとの表現の一部置換の

の詳しい情報は、以下のように関数を定義しhere、見つけることができます

set.seed(100L); 
x <- rnorm(100L); 
y <- 1:100; 
fit <- lm(y~x); 
R_squared <- format(summary(fit)$r.squared,digits=3L); 
plot(x,y,type='l'); 
legend('topleft',legend=bquote(R^{2} ~ "=" ~ .(R_squared)),bty='n'); 

アナログをLISPバッククォートマクロの。 bquoteは、指定された場所(つまり、 )で。()で囲まれた語句が評価されることを除いて、その引数 を引用します。

+0

華麗な答え!ありがとう。 Rの '式'に慣れていません。 –

+1

'legend = bquote(R^{2}〜" = "〜。(R_squared))、" bty = 'n') '。これに関する文書はありますか?ありがとう。 –

+0

@ YangYang、解説に加えられた編集情報を参照してください。 – desc