R 以整齐的评价变异
使用R 以整齐的评价变异,r,tidyverse,tidyeval,R,Tidyverse,Tidyeval,使用mutate\(我过去常常提供新变量的列表以及创建它们所需的逻辑 library(dplyr) library(rlang) list_new_var <- list(new_1 = "am * mpg", new_2 = "cyl + disp") mtcars %>% mutate_(.dots = list_new_var) %>% head() 库(dplyr) 图书馆(rlang) 列出新的变量% 变异(.dots=list\u
mutate\(
我过去常常提供新变量的列表以及创建它们所需的逻辑
library(dplyr)
library(rlang)
list_new_var <-
list(new_1 = "am * mpg",
new_2 = "cyl + disp")
mtcars %>%
mutate_(.dots = list_new_var) %>%
head()
库(dplyr)
图书馆(rlang)
列出新的变量%
变异(.dots=list\u new\u var)%>%
总目()
现在我想过渡到使用tidy评估。我正在了解新方法
我怎样才能做到这一点?通常会推荐一个函数来解决这种情况吗
f_mutate <- function(data, new) {
a <- expr(new)
b <- eval(new)
c <- syms(new)
d <- UQ(syms(new))
e <- UQS(syms(new))
f <- UQE(syms(new))
data %>%
mutate(f) %>%
head()
}
f_mutate(mtcars, new = list_new_var)
f_mutate我认为你不需要一个函数。我想你只需要以下几点
library(dplyr)
mtcars %>%
as_tibble() %>%
mutate(new_column1 = am * mpg,
new_column2 = cyl + disp) %>%
head()
查看第一个示例。一个选项是创建一个带有引号的列表
,作为参数返回而不进行计算
list_new_var <-list(
new_1 = quote(am * mpg),
new_2 = quote(cyl + disp)
)
运行函数
f_mutate(mtcars, new = list_new_var) %>%
head
# mpg cyl disp hp drat wt qsec vs am gear carb new_1 new_2
#1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 21.0 166
#2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 21.0 166
#3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 22.8 112
#4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 0.0 264
#5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 0.0 368
#6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 0.0 231
问题是,这些新变量将在某种用户界面中预先指定,因此我希望传入变量创建逻辑,而不是实际创建变量。为供将来参考,另一种实现方法是使用parse_quosure()。我本可以完成rlang_list%lapply(rlang::parse_quosure);mtcars%>%变异(!!!rlang_列表)
f_mutate(mtcars, new = list_new_var) %>%
head
# mpg cyl disp hp drat wt qsec vs am gear carb new_1 new_2
#1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 21.0 166
#2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 21.0 166
#3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 22.8 112
#4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 0.0 264
#5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 0.0 368
#6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 0.0 231