在绘图文本中使用表达式 - 打印变量的值而不是其名称

Cod*_*Guy 7 plot r

我想要一个标签,在其中有一个指数.这是我的代码

vall = format(cor(x,y)*cor(x,y),digits=3)
eq <- expression(paste(R^2," = ",vall,sep=""))
text(legend.x,legend.y,eq,cex=1,font=2)
Run Code Online (Sandbox Code Playgroud)

但文字看起来就像这样 在此输入图像描述

如何显示实际的vall(而不是文本"vall")

Rei*_*son 15

试试bquote(),例如:

set.seed(1)
vall <- format(rnorm(1),digits=3)
eq <- bquote(bold(R^2 == .(vall)))
sq <- seq(0, 1, by = 0.1)
plot(sq, sq, type = "n")
text(0.5, 0.5, eq)
Run Code Online (Sandbox Code Playgroud)

你的例子不起作用的原因是R永远不会最终评估vall:

> eq2 <- expression(paste(R^2," = ",vall,sep=""))
> eq2
expression(paste(R^2, " = ", vall, sep = ""))
Run Code Online (Sandbox Code Playgroud)

plotmath试图从中做出一些事情,但基本上vall是字面意思.

通常,paste()在plotmath表达式中不需要使用标准运算符和布局运算符来构建表达式.例如,对于与您的示例生成(未评估vall)的表达式相同的表达式,您真正需要的是:

expression(R^2 == vall)
Run Code Online (Sandbox Code Playgroud)

bquote()是在表达式中将对象替换为其值的一种方法.您将要替换的对象换入其值.( ).然后,R将查找该对象并获取其值并将其插入表达式中.

另请参阅substitute()使用不同界面的替代方法.