【问题标题】:evaluate expression in data.table评估 data.table 中的表达式
【发布时间】:2019-11-22 19:18:41
【问题描述】:

我正在尝试将字符串评估为公式:

在 dplyr 中它看起来像这样:

dt = data.table(a = 1:10)
expr = 'sum(a)'

dt %>% 
  mutate(b := !!parse_expr(expr))

但是,当我尝试使用 data.table 时出现错误:

dt[, b := parse_expr(expr)]

[.data.table(dt, , :=(b, parse_expr(expr))) 中的错误: 赋值的 RHS 不是 NULL,不是原子向量(参见 ?is.atomic),也不是列表列。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    可以用eval(parse代替parse_expr

    dt[, b := eval(parse(text = expr))]
    

    或者在parse_expr 上用eval 包装,因为!! 正在tidyverse 中进行评估

    dt[, b := eval(rlang::parse_expr(expr)) ]
    

    【讨论】:

    • @R.M.对于 rlang 和 tidyverse,它们使用与 !! 一致的模式,但这在 tidyverse 环境之外不起作用,否则您可能需要 as_mapper
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多