【问题标题】:Unexpected results using eval() in R在 R 中使用 eval() 的意外结果
【发布时间】:2022-10-14 22:47:24
【问题描述】:

我有一个名为“equation”的列,它存储了关于“t”的公式。另一列是“t”。我想根据行中的每个t 计算方程的值(y)。下面是一个例子。

library(magrittr);library(dplyr)

dt <- data.frame(t = c(1,2,3),
                 equation = c("t+1", "5*t", "t^3"))

dt %<>% 
  mutate(y = eval(parse(text = equation)))

然而,结果似乎出乎意料:

  t equation  y
  1      t+1  1
  2      5*t  8
  3      t^3 27

y 的预期结果是:2, 10, 27。我应该怎么做才能修复它(但第三个y 是正确的)?

【问题讨论】:

    标签: r


    【解决方案1】:

    这是因为 eval(parse()) 没有矢量化。您可以使用rowwise() 解决此问题:

    library(magrittr)
    library(dplyr, warn.conflicts = FALSE)
    
    dt <- data.frame(
      t = c(1,2,3),
      equation = c("t+1", "5*t", "t^3")
    )
    
    dt %<>% 
      rowwise() %>%
      mutate(y = eval(parse(text = equation))) %>%
      ungroup()
    #> # A tibble: 3 × 3
    #>       t equation     y
    #>   <dbl> <chr>    <dbl>
    #> 1     1 t+1          2
    #> 2     2 5*t         10
    #> 3     3 t^3         27
    

    创建于 2022 年 10 月 14 日,reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2012-09-27
      • 2019-01-09
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多