R Shiny:如何创建使用函数参数输入粘贴 "input$" 的服务器端函数
R Shiny: How to create server-side functions that paste "input$" with function argument inputs
我正在尝试创建一个函数来简化一个长反应式表达式。目标是根据用户输入创建数据框。该函数的目标是根据函数参数动态引用 UI 中的不同输入。该函数有一个“day”参数,应该用 input$A
粘贴以创建 input$A<day>
,其中 <day>
是我的服务器端函数的输入。在下面的示例中,我将 运行 foo(day = 1)
在我的主服务器功能中,这将根据用户在我的应用程序“第 1 天”中输入的输入创建一个数据框。
我非常天真开始于:
foo <- function(day) {
df <- data.frame(
"A" = paste0("input$A", day),
"B" = paste0("input$B", day)
)
}
我知道这行不通,只是创建了一个数据框,其中包含多行文本“input$Aday”和“input$Bday”。从那以后,我一直在探索使用 eval(parse())
、rlang
等,但没有成功。任何帮助将不胜感激。
这里有两种将输入引用为对象的方法:
library(tidyverse)
library(shiny)
ui <- fluidPage(
textInput('A1', 'InputA1', value = 'hello'),
textInput('B1', 'InputB1', value = 'How are you?')
)
server <- function(input, output, session) {
foo1 <- function(day) {
df <- data.frame(
"A" = input[[str_c('A', day)]],
"B" = input[[str_c("B", day)]]
)
}
foo2 <- function(day) {
df <- tibble(
"A" = parse(text =str_c('input$A', day)) %>% eval(),
"B" = parse(text =str_c('input$B', day)) %>% eval()
)
}
observe({
print(foo1(day = 1))
print(foo2(day = 1))})
}
shinyApp(ui, server)
#>
#> Listening on http://127.0.0.1:6240
#> A B
#> 1 hello How are you?
#> # A tibble: 1 x 2
#> A B
#> <chr> <chr>
#> 1 hello How are you?
由 reprex package (v2.0.0)
于 2021-06-26 创建
我正在尝试创建一个函数来简化一个长反应式表达式。目标是根据用户输入创建数据框。该函数的目标是根据函数参数动态引用 UI 中的不同输入。该函数有一个“day”参数,应该用 input$A
粘贴以创建 input$A<day>
,其中 <day>
是我的服务器端函数的输入。在下面的示例中,我将 运行 foo(day = 1)
在我的主服务器功能中,这将根据用户在我的应用程序“第 1 天”中输入的输入创建一个数据框。
我非常天真开始于:
foo <- function(day) {
df <- data.frame(
"A" = paste0("input$A", day),
"B" = paste0("input$B", day)
)
}
我知道这行不通,只是创建了一个数据框,其中包含多行文本“input$Aday”和“input$Bday”。从那以后,我一直在探索使用 eval(parse())
、rlang
等,但没有成功。任何帮助将不胜感激。
这里有两种将输入引用为对象的方法:
library(tidyverse)
library(shiny)
ui <- fluidPage(
textInput('A1', 'InputA1', value = 'hello'),
textInput('B1', 'InputB1', value = 'How are you?')
)
server <- function(input, output, session) {
foo1 <- function(day) {
df <- data.frame(
"A" = input[[str_c('A', day)]],
"B" = input[[str_c("B", day)]]
)
}
foo2 <- function(day) {
df <- tibble(
"A" = parse(text =str_c('input$A', day)) %>% eval(),
"B" = parse(text =str_c('input$B', day)) %>% eval()
)
}
observe({
print(foo1(day = 1))
print(foo2(day = 1))})
}
shinyApp(ui, server)
#>
#> Listening on http://127.0.0.1:6240
#> A B
#> 1 hello How are you?
#> # A tibble: 1 x 2
#> A B
#> <chr> <chr>
#> 1 hello How are you?
由 reprex package (v2.0.0)
于 2021-06-26 创建