适用于 NSE 和 Shiny Inputs 的 R 函数
R function that works with NSE and Shiny Inputs
我正在寻找一种简单的方法让我的函数处理来自 Shiny
的输入(即字符串输入)或典型的交互式使用,即 Tidyverse
函数与 NSE 一起启用。无需复制我的代码来分别处理每个案例。
用法示例:
library(dplyr)
flexible_input <- function(var){
mtcars %>%
select(var)
}
# This works for NSE
nse_input <- function(var){
mtcars %>%
select({{ var }})
}
# This works for shiny but now I am duplicated my code essentially
shiny_input <- function(var){
mtcars %>%
select(.data[[var]])
}
flexible_input(mpg)
flexible_input('mpg')
如果我们需要 flexible_input
获取字符串和不带引号的输入,转换为 sym
bol 并计算 (!!
)
flexible_input <- function(var){
mtcars %>%
dplyr::select(!! rlang::ensym(var))
}
-测试
> flexible_input(mpg) %>% head
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4
Hornet Sportabout 18.7
Valiant 18.1
> flexible_input("mpg") %>% head
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4
Hornet Sportabout 18.7
Valiant 18.1
我正在寻找一种简单的方法让我的函数处理来自 Shiny
的输入(即字符串输入)或典型的交互式使用,即 Tidyverse
函数与 NSE 一起启用。无需复制我的代码来分别处理每个案例。
用法示例:
library(dplyr)
flexible_input <- function(var){
mtcars %>%
select(var)
}
# This works for NSE
nse_input <- function(var){
mtcars %>%
select({{ var }})
}
# This works for shiny but now I am duplicated my code essentially
shiny_input <- function(var){
mtcars %>%
select(.data[[var]])
}
flexible_input(mpg)
flexible_input('mpg')
如果我们需要 flexible_input
获取字符串和不带引号的输入,转换为 sym
bol 并计算 (!!
)
flexible_input <- function(var){
mtcars %>%
dplyr::select(!! rlang::ensym(var))
}
-测试
> flexible_input(mpg) %>% head
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4
Hornet Sportabout 18.7
Valiant 18.1
> flexible_input("mpg") %>% head
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4
Hornet Sportabout 18.7
Valiant 18.1