将 tidyselect 辅助函数添加到向量
Adding tidyselect helper functions to a vector
我经常为编码时最常使用的变量创建一个“向量”。通常,如果我只是在 select
中输入矢量对象,它就可以完美运行。有什么方法可以在字符串的辅助函数中使用吗?
例如我可以做
library(dplyr)
x = c('matches("cyl")')
mtcars %>%
select_(x)
但这不是可取的,因为 1) select_
已被弃用,并且 2) 它不可扩展(即,x = c('hp', 'matches("cyl")')
不会获取两个相关列。
我是否可以在 vector 中使用更多的 tidyselect 辅助函数?
注意:如果我这样做:
x = c(matches("cyl"))
#> Error: `matches()` must be used within a *selecting* function.
#> ℹ See <https://tidyselect.r-lib.org/reference/faq-selection-context.html>.
我收到一个错误,所以我肯定需要 enquo
以某种方式处理它。
您正在尝试将字符串转换为代码,这可能不是最佳方法。但是,您可以将 parse_exprs
与 !!!
一起使用。
library(dplyr)
library(rlang)
x = c('matches("cyl")')
mtcars %>% select(!!!parse_exprs(x))
# Cyl
#Mazda RX4 6
#Mazda RX4 Wag 6
#Datsun 710 4
#Hornet 4 Drive 6
#Hornet Sportabout 8
#...
x = c('matches("cyl")', 'hp')
mtcars %>% select(!!!parse_exprs(x))
# cyl hp
#Mazda RX4 6 110
#Mazda RX4 Wag 6 110
#Datsun 710 4 93
#Hornet 4 Drive 6 110
#Hornet Sportabout 8 175
#....
我经常为编码时最常使用的变量创建一个“向量”。通常,如果我只是在 select
中输入矢量对象,它就可以完美运行。有什么方法可以在字符串的辅助函数中使用吗?
例如我可以做
library(dplyr)
x = c('matches("cyl")')
mtcars %>%
select_(x)
但这不是可取的,因为 1) select_
已被弃用,并且 2) 它不可扩展(即,x = c('hp', 'matches("cyl")')
不会获取两个相关列。
我是否可以在 vector 中使用更多的 tidyselect 辅助函数?
注意:如果我这样做:
x = c(matches("cyl"))
#> Error: `matches()` must be used within a *selecting* function.
#> ℹ See <https://tidyselect.r-lib.org/reference/faq-selection-context.html>.
我收到一个错误,所以我肯定需要 enquo
以某种方式处理它。
您正在尝试将字符串转换为代码,这可能不是最佳方法。但是,您可以将 parse_exprs
与 !!!
一起使用。
library(dplyr)
library(rlang)
x = c('matches("cyl")')
mtcars %>% select(!!!parse_exprs(x))
# Cyl
#Mazda RX4 6
#Mazda RX4 Wag 6
#Datsun 710 4
#Hornet 4 Drive 6
#Hornet Sportabout 8
#...
x = c('matches("cyl")', 'hp')
mtcars %>% select(!!!parse_exprs(x))
# cyl hp
#Mazda RX4 6 110
#Mazda RX4 Wag 6 110
#Datsun 710 4 93
#Hornet 4 Drive 6 110
#Hornet Sportabout 8 175
#....