评估数据框列的表达式

Evaluate an expression to data frame columns

我想评估给定数据框的多个表达式和 return 具有转换列的数据框。我以前做的是:

library(dplyr)
df <- data.frame(A = 1:5, B = 6:10)
expr <- c("A+B", "A-B")
names(expr) <- c("V1", "V2")
df %>% transmute_(.dots = lazyeval::all_dots(expr))

此代码将 return 所需的输出:

  V1 V2
1  7 -5
2  9 -5
3 11 -5
4 13 -5
5 15 -5

但是,transmute_ 和 lazyeval 都已弃用,想知道是否有更好的方法来做到这一点?真实数据包含许多表达式和列,因此也在寻找更省时的方法。

这种方式有点绕,但也许适合你的目的:

library(tidyverse)
expr %>% map(str2expression) %>% map(eval, envir = df) %>% as.data.frame()
#  V1 V2
#1  7 -5
#2  9 -5
#3 11 -5
#4 13 -5
#5 15 -5

#Check
identical(df %>% transmute_(.dots = lazyeval::all_dots(expr)), 
          expr %>% map(str2expression) %>% 
                   map(eval, envir = df) %>% 
                   as.data.frame()
          )

# [1] TRUE