将函数作为文本读取并用于绘图

Read functions as text and use for plotting

我在 .csv 文件的单列中列出了一组 500 个方程。方程式写成这样的文本(例如):

15+6.2*A-4.3*B+3.7*C-7.9*B*C+2*D^2

(这是等式的“右边”,等于“y”,但文本“y=”没有出现在 .csv 文件中)

这些是由其他人写入 .csv 文件的一般线性模型。并非所有模型都具有相同数量的变量。

我想将这些函数读入 R 并以一种允许使用它们(迭代地)制作一个范围内“y”的简单线图(每个 n = 500 个模型一个)的方式格式化它们A 的值(显示在 x 轴上),给定 B、C 和 D 的值。

有人对如何执行此操作有任何建议吗?

我基于这个 [post][1] 想到了一些方法,这不是最好的解决方案,但似乎可行。

方程式

为示例创建了两个等式

models <- c("15+6.2*A-4.3*B+3.7*C-7.9*B*C+2*D^2","50+6.2*A-4.3*B+3.7*C-7.9*B*C+2*D^2")
models_names <- c("model1","model2")

数据

以随机数据为例

data <-
tibble(
  A = rnorm(100),
  B = rnorm(100),
  C = rnorm(100),
  D = rnorm(100)
)

函数

然后创建了一个使用这些文本方程式的函数,并将其作为返回值的函数应用

text_model <- function(formula){
  eval(parse(text = paste('f <- function(A,B,C,D) { return(' , formula , ')}', sep='')))
  out <- f(data$A,data$B,data$C,data$D)
  return(out)
}

应用方程

最后,我对数据应用每个方程,绑定两者。

data %>% 
  bind_cols(
    map(.x = models,.f = text_model) %>% 
      set_names(models_names) %>% 
      bind_rows(.id = "model") 
  )

# A tibble: 100 x 6
          A       B      C       D model1 model2
      <dbl>   <dbl>  <dbl>   <dbl>  <dbl>  <dbl>
 1 -0.0633   1.18   -0.409  2.01     9.52   54.9
 2 -0.00207  1.35    1.28   1.59     9.16   40.3
 3  0.798   -0.141   1.58  -0.123   20.6    63.2
 4 -0.162   -0.0795  0.408  0.663   14.3    52.0
 5 -1.11     0.788  -1.37   1.20     4.71   46.0
 6  2.80     1.84   -0.850  0.161   24.4    68.7
 7  1.03     0.550   0.907 -1.92    19.0    60.8
 8  0.515   -0.179  -0.980  0.0437  19.0    48.9
 9 -0.353    0.0643  1.39   1.30    12.5    55.3
10 -0.427   -1.01   -1.11  -0.547   16.7    39.3
# ... with 90 more rows