Вам, очевидно, нужно unname
значения coef ():
lm_eqn = function(m) {
l <- list(a = format(unname(coef(m))[1], digits = 2),
b = format(abs(unname(coef(m))[2]), digits = 2),
r2 = format(summary(m)$r.squared, digits = 3));
eq <- bquote( italic(C)[i] == .(l$a) + .(l$b) %.% italic(I)[i]*","~~italic(r)^2~"="~.(l$r2))
as.character(as.expression(eq));
}
Я также думаю, что вам нужно уточнить, что именно вы надеетесь увидеть. В данный момент вы создаете вектор выражения с двумя элементами, а затем преобразуете его в символ. Тот факт, что ggplot
требует символьных значений для своих «выражений», делает довольно трудным просмотр символьного значения и выяснение того, что будет отображаться, поэтому вам, вероятно, следует расширить свой тестовый код, чтобы включить способ, которым это значение будет доставлен. (Гораздо проще взглянуть на настоящее R-выражение.) Я думаю, что есть механизмы, позволяющие передавать неоцененные выражения в аннотации и заголовки ggplot, но они кажутся мне невероятно запутанными.
Можно также использовать substitute
, что требует указания списка с именованными элементами.
lm_eqn = function(m) {
l <- list(a = format(unname(coef(m))[1], digits = 2),
b = format(abs(unname(coef(m))[2]), digits = 2),
r2 = format(summary(m)$r.squared, digits = 3));
eq <- substitute( italic(C)[i] == a + b %.% italic(I)[i]*","~~italic(r)^2 == r2, env=l) )
as.character(as.expression(eq));
}
lm_eqn(test.lm)
[1] "italic(C)[i] == \"3.3\" + \"0.37\" %.% italic(I)[i] * \",\" ~ ~italic(r)^2 == \"0.0969\""