несколько цитат в легенде о сюжете R - PullRequest
11 голосов
/ 27 августа 2011

После работ (скопируйте и вставьте в 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))))

Я пробовал много более сложных выражений, но все они не работали.

Любая помощь будетоценили.

Ответы [ 2 ]

15 голосов
/ 27 августа 2011

В этом случае 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))
1 голос
/ 04 октября 2016

Для приведения исходного списка обращений к выражениям нет необходимости использовать sapply(). Достаточно использовать as.expression() только для одного из компонентов в конструкции c():

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

c() будет автоматически приводить все list к классу expression.

...