R замещающая функция выводит c () в уравнение - PullRequest
0 голосов
/ 03 июля 2018

У меня была старая функция, которая работала как шарм:

lm_eqn = function(m) {

    l <- list(a = format(coef(m)[1], digits = 2),
    b = format(abs(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,l)


    as.character(as.expression(eq));
}

где m была моделью lm. Это приведет к уравнению, подобному следующему:

у = 0,3 + 4,4х, г = 0,67

, который затем можно использовать в ggplot, чтобы показать формулу модели с ее графиком. Проблема в том, что то же самое уравнение теперь включает невостребованные символы:

у = с (0,3) + с (4,4) х, г = 0,67

Объединенный c () теперь включен для каждой переменной из списка, который я накапливаю - и я не знаю почему. Кто-нибудь знает как

а) предотвратить это, или б) исправить это?

Примечание: проблема возникает при замене, вывод команды eq:

"italic(y) == c(`(Intercept)` = \"0.3\") + c(x = \"4.4\") %.% italic(x) * \",\" ~ ~italic(r)^2 ~ \"=\" ~ \"0.67\""

Похоже, что вывод заменителя включает c () для перехвата и наклона.

1025 * редактировать * m в этом случае является общим элементом lm. Например x <- c(5,3,6,8,2,6) y <- c(2,6,3,7,4,9) test.lm <- lm(y~x) lm_eqn(test.lm) [1] "italic(C)[i] == c(`(Intercept)` = \"3.3\") + c(x = \"0.37\") %.% italic(I)[i] * \",\" ~ ~italic(r)^2 ~ \"=\" ~ \"0.0969\""

1 Ответ

0 голосов
/ 04 июля 2018

Вам, очевидно, нужно 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\""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...