13

以下作品,(复制并粘贴到R中)

a=123
plot(1,1)
legend('bottomleft',legend=bquote(theta == .(a)))

我想在图例中有多个项目。全部用希腊字母。举个简单的例子,如果我重复该项目两次,则代码不再起作用

a=123
plot(1,1)
legend('bottomleft',legend=c(bquote(theta == .(a)),bquote(theta == .(a))))

我尝试了许多更复杂的表达式,但它们都不起作用。

任何帮助将不胜感激。

4

2 回答 2

19

在这种情况下,plotmath 无法强制调用表达式列表。

> cs <- c(bquote(theta == .(a)),bquote(theta == .(a)))
> cs
[[1]]
theta == 123

[[2]]
theta == 123

> sapply(cs, class)
[1] "call" "call"

如果您自己强制表达,您可以使这项工作:

> c(as.expression(bquote(theta == .(a))), as.expression(bquote(theta == .(a))))
expression(theta == 123, theta == 123)
> plot(1,1)
> legend('bottomleft',legend= c(as.expression(bquote(theta == .(a))), 
+                               as.expression(bquote(theta == .(a)))))

另一种方法是使用以下命令强制调用表达式的原始列表sapply

plot(1,1)
legend("bottomleft", 
       sapply(c(bquote(theta == .(a)), bquote(theta == .(a))), as.expression))
于 2011-08-26T20:53:40.003 回答
1

要强制调用表达式的原始列表,不必使用sapply(). as.expression()仅用于构造中的一个组件就足够了c()

plot(1,1)
legend("bottomleft", 
       c(as.expression(bquote(theta == .(a))), bquote(theta == .(a))))

c()然后会自动将整个list, 强制到expression班级。

于 2016-10-04T10:29:37.527 回答