【问题标题】:R function that works with NSE and Shiny Inputs与 NSE 和闪亮输入一起使用的 R 函数
【发布时间】:2021-09-24 16:31:27
【问题描述】:

我正在寻找一种简单的方法来让我的函数使用来自 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')

【问题讨论】:

  • # This works for NSE# This works for shiny 是什么意思?该函数根据传递的输入以及您如何调用它来工作。如果您在闪亮或其他任何地方使用它,它不会改变它的行为。
  • 闪亮的小部件将值作为字符串传递。所以这个函数可以处理字符串。而 NSE 通过传递变量名称而不被引用来工作。因此该函数将使用该输入。

标签: r shiny nse


【解决方案1】:

如果我们需要 flexible_input 获取字符串和不带引号的输入,请转换为 symbol 并评估 (!!)

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

【讨论】:

  • 我正在寻找flexible_input 的实现。 shiny_inputnse_input 都使用它们各自的预期输入。
  • @student 请检查更新
猜你喜欢
  • 2021-09-29
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2017-05-15
  • 2014-04-11
相关资源
最近更新 更多