2017-09-27 13 views
0

私はいつも自分のRコードをできるだけ柔軟にしたいと思っています。私はパラメータデルタに基づいて比較する3つの(潜在的により多くの)カーブを持っていますが、デルタの値をどこにでもハードコーディングしたくありません。R凡例変数置換

私は、デルタ値の代わりにギリシャ語と変数置換の両方を含む凡例を作成しようとしています。したがって、各凡例は「delta = 0.01」のような形式です。 paste,substitute,bquoteおよびexpressionの多くの異なる組合せが試みられているが、完成した凡例にはいくつかの逐語的コードが残されている。または、「デルタ」を記号形式に入れない。

delta <- c(0.01,0.05,0.1) 
plot(type="n", x=1:5, y=1:5) #the curves themselves are irrelevant 
legend_text <- vector(length=length(delta)) #I don't think lists work either 
for(i in 1:length(delta)){ 
    legend_text[i] <- substitute(paste(delta,"=",D),list(D=delta[i])) 
} 
legend(x="topleft", fill=rainbow(length(delta)), legend=legend_text) 

単一エントリのlegend=substitute(paste(delta,"=",D),list(D=delta[1])働くので、私もデルタの長さは固定、「セミハードコード」バージョンをやってみました:

legend(x="topleft", fill=rainbow(length(delta)), 
     legend=c(substitute(paste(delta,"=",A), list(A=delta[1])), 
       substitute(paste(delta,"=",B), list(B=delta[2])), 
       substitute(paste(delta,"=",C), list(C=delta[3]))) 
    ) 

をしかし、これは以前と同じ問題を持っています。

私はこれを行う方法はありますか、またはデルタの各アップデートで手動でコードを変更する必要はありますか?

答えて

0

lapply()as.expression()を使用して、凡例ラベルを生成してみてください。 plotmathであなたが等号取得する==が必要であることも、あなたの個々の表現

legend_text <- as.expression(lapply(delta, function(d) { 
    bquote(delta==.(d)) 
})) 

ノートを作成するためにbquoteを使用しています。何も実際には文字列ではないので、paste()の必要もありません。

関連する問題