如何将eval解析文本压缩为一个函数



如何将函数从eval(parse(text='5+5'))压缩到eval2('5+5'),这样就不会每次写3个字而不是一个字?

我经常使用这种结构,我需要压缩它

UPD:使情况复杂化,因为将eval打包到函数中是不起作用的,例如,使用data.table。我希望eval(parse(text=))在这种情况下变成eval():

dt <- data.table(a = c(1, 1, 1, 1), foo_col = c('a', 'b', 'X', 'asd'))

cur_col <- 'foo_col2'

dt[, eval(parse(text=glue::glue('{cur_col} := c(3, 3, 3, 3)')))]

附言:dt[, (cur_col) := c(3, 3, 3, 3)]的设计不适合。在它上面,data.table在一个奇特的案例中抱怨不必要的复制。

但它在使用eval(parse(text=时没有抱怨

此外,原则上我经常使用这种结构,所以我想把它带到脑海中。

只需围绕这些evalparse编写一个包装函数

eval2 <- function(txt) {
eval(parse(text = txt))
}
eval2('5 + 5')
#> [1] 10
eval(parse(text = '5 + 5'))
#> [1] 10

创建于2022-07-07由reprex包(v2.0.1)

最新更新