r - tidyeval:将字符串转换为 dplyr 函数中的变量
问题描述
我无法将字符串传递给使用 dplyr 的函数。
首先,我有一个简单的版本,可以产生我想要的输出,但没有按我想要的方式调用。
接下来,我展示了一个版本,在该版本中我以我想调用的方式调用函数,即使该版本不起作用。
这会产生我想要的结果:
car_column <- function(d,Column,Value,Regex) {
d %>%
filter(str_detect(car_name, regex('mazda', ignore_case = TRUE))) %>%
rename(Measurement = mpg) %>%
select(car_name, Measurement)
}
mtcars %>%
tibble::rownames_to_column() %>%
rename(car_name = rowname) %>%
car_column(car_name, mpg, "mazda")
这段代码调用了我想要调用的函数。请注意,“car_name”在此函数定义中是硬编码的,但应更改为“Column”。
car_column <- function(d,Column,Value,Regex, Statistic) {
d %>%
filter(str_detect(car_name, regex(Regex, ignore_case = TRUE))) %>%
rename({{Statistic}}:= {{Value}}) %>%
select({{Column}}, {{Statistic}})
}
mtcars %>%
tibble::rownames_to_column() %>%
rename(car_name = rowname) %>%
car_column("car_name", "mpg", "mazda","Measurement")
解决方案
由于输入参数是字符串,将其转换为sym
bol 并计算 ( !!
)
car_column <- function(d,Column,Value,Regex, Statistic) {
d %>%
filter(str_detect(!! rlang::sym(Column), regex(Regex, ignore_case = TRUE))) %>%
rename({{Statistic}}:= {{Value}}) %>%
select({{Column}}, {{Statistic}})
}
mtcars %>%
tibble::rownames_to_column() %>%
rename(car_name = rowname) %>%
car_column("car_name", "mpg", "mazda","Measurement")
# car_name Measurement
#1 Mazda RX4 21
#2 Mazda RX4 Wag 21
推荐阅读
- javascript - 如何在 Shiny 中使用 Javascript 更改音量?
- c++ - if语句返回0,是真假还是程序运行成功?
- javascript - 如何分析创建反应应用程序构建大小并减少它?
- bootstrap-4 - 请向我解释此特定示例的 Bootstrap 网格的行为
- ios - ISO8601DateFormatter 未将字符串转换为日期
- swift - 为什么 swift 中的这个正则表达式不起作用?
- android - android dexDebug 或 dexRelease 任务后如何执行 gradle 任务
- c++ - 如何在 XCB 中正确地重新堆叠所有窗口(如 XLIB 中的 XRestackWindows)
- python - 如何使用 Azure 函数中的 pymongo 连接到 Cosmos DB
- authentication - MSAL SSO:如何在子 iframe 中获取父窗口的登录帐户信息?