在绘图公式中使用变量

30

我正在尝试在图表中放置回归结果(即R2),但似乎无法弄清如何从表达式中调用变量(它会粘贴变量名)。

这是我的代码。

R2Val <- signif(summary(sMod_pre90)$r.squared[1], 2)
text(92, 4, expression(paste(R^2, " = ", R2Val)), adj = 0, cex = 0.85)
3个回答

32

使用bquote()。这里有一个使用虚拟数据的示例:

set.seed(1)
DF <- data.frame(A = rnorm(100), B = rnorm(100))
mod <- lm(B ~ A, data = DF)
R2Val<-signif(summary(mod)$r.squared[1], 2)

.() 包裹的表达式会在当前环境下求值,即会用变量 R2Val 的值代替。

plot(B ~ A, data = DF)
text(1.5, 2, labels = bquote(R^2 == .(R2Val)), adj = 0, cex = 0.85)

另一个潜在的解决方案是substitute,其工作方式类似:

plot(B ~ A, data = DF)
text(1.5, 2, labels = substitute(R^2 == A, list(A = R2Val)), adj = 0, cex = 0.85)

1
为了结合使用substitute()paste(),我使用以下代码;
waic <-1;
chisquare <-2;
plot(x=1:2,y=1:2, 
     main =  substitute(paste(
    "chi^2 goodness of fit ", 
       chi^2*(D/theta) , "=",  chisquare ,
       ".  WAIC =",waic),


list(chisquare=chisquare,waic=waic)  
)
)

结果如下;

enter image description here


0

我已经成功地使用替换函数把它拼凑起来了。

R2Val <- signif(summary(sMod_pre90)$r.squared[1], 2)
text(92, 4, substitute(R^2 ~ "=" ~ R2Val), adj = 0, cex = 0.85)

一切都很好。


那不起作用。你缺少一个参数来告诉“substitute”要替换哪些变量。请看我的答案。 - Gavin Simpson
我已经使用上述解决方案成功地将文本粘贴到图表中;它似乎替换了变量调用,同时按照应有的方式评估了绘图数学。我不确定为什么它对你没有起作用。 - sinclairjesse
1
好的,我已经在两台机器上检查了这个问题,分别使用了 Linux 上的 R2.11-patched 和 R2.12-patched,并且您的答案在两台机器上都不起作用。 R2Val 的输出是字面值,而不是在绘图中被解释的值。我认为 ?substitute 很清楚,除非您为 env 参数提供某些内容,否则在此示例中不会进行替换。 - Gavin Simpson
1
我在我的Linux系统上也测试了以上代码,并且我认为我已经弄清楚了区别所在。在控制台直接运行上述代码会导致变量被逐字打印出来(即R2Val),但是之前我在运行代码时,它被包含在一个函数中。如果将模型开发和绘图代码放在一个函数中,则会得到所需的结果。在这种情况下,环境必须被隐含。我接受你的答案Gavin,因为这是最好的方法。希望这能澄清问题。 - sinclairjesse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接