Удалить ненужные символы из функции выражения - R - PullRequest
0 голосов
/ 26 апреля 2018

Я использую функцию ниже (найдено здесь ) для генерации линейных уравнений модели.

df <- data.frame(x = c(1:100))

df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)

lm_eqn <- function(df){
  m <- lm(y ~ x, df);
  eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
                   list(a = format(coef(m)[1], digits = 2), 
                        b = format(coef(m)[2], digits = 2), 
                        r2 = format(summary(m)$r.squared, digits = 3)))
  as.character(as.expression(eq));                 
}

lm_eqn(df)

[1] "italic(y) == \"14\" + \"3\" %.% italic(x) * \",\" ~ ~italic(r)^2 ~ \"=\" ~ \"0.806\""

Однако эта функция была создана для использования в ggplot2, то есть она включает в себя определенные символы expression, которые ggplot2 распознает и действует на них.Я использую эту функцию для чего-то другого.Как я могу изменить код, чтобы я просто получил "y = 14 + 3x, r2=0.806"?Спасибо.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Если речь идет о динамическом создании / форматировании выходной строки, вы также можете использовать stringr::str_interp:

# Sample data
set.seed(2017);
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)

# Fit
m <- lm(y ~ x, df);

# Extract coefficients and generate string
a <- coef(m)[1];
b <- coef(m)[2];
r2 <- summary(m)$r.squared;
stringr::str_interp("y = $[2.0f]{a} + $[2.0f]{b} x, R2 = $[4.3f]{r2}")
#[1] "y =  9 +  3 x, R2 = 0.793"

Или использовать sprintf:

sprintf("y = %2.0f + %2.0f x, R2 = %4.3f", a, b, r2);
#[1] "y =  9 +  3 x, R2 = 0.793"
0 голосов
/ 26 апреля 2018

Мы можем использовать glue

as.character(glue::glue("y = {round(a)} + {round(b)} x, R2 = {round(r2, 3)}"))
#[1] "y = 9 + 3 x, R2 = 0.793"

ПРИМЕЧАНИЕ. Данные основаны на публикации @MauritsEvers

0 голосов
/ 26 апреля 2018

Ах, нашел его.

g<-as.character("y = a + b x, R2= r2 ")

library(magrittr)

g %<>%
  gsub("a", format(coef(m)[1], digits = 2), .) %>%
  gsub("b", format(coef(m)[2], digits = 2), .) %>%
  gsub("r2", format(summary(m)$r.squared, digits = 3), .)

g

[1] "y = 14 + 3 x, R2= 0.806 "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...