从表达式函数中删除不需要的符号 - R.

时间:2018-04-26 02:44:39

标签: r function character lm

我正在使用以下函数(找到here)来生成线性模型方程。

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 :(得分:2)

如果这是关于动态生成/格式化输出字符串,您还可以使用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"

答案 1 :(得分:1)

我们可以使用glue

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

注意:基于@MauritsEvers的数据发布

答案 2 :(得分:0)

啊,发现了。

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 "