使用 Shiny 应用程序以交互方式设置变量的值以供以后在 R 中使用?

问题描述 投票:0回答:1

我想使用 Shiny 应用程序以交互方式设置一些变量。我不想在脚本顶部定义一些对象/变量,而是想启动一个应用程序并使用滑块/textInputs/radioButtons 来定义它们的值。我想这样做,以便我可以在下游使用这些变量,就像人们可能使用类似的东西

readline(prompt = "Choose a value for your variable: ")

我可以想象的这个用例的最小闪亮应用程序如下所示:

library(shiny)
ui <- fluidPage(
  h3("Set the value for downstream analysis!"),
  sliderInput(inputId = "value", label="Value", min = 0, max = 10, value = 1),
  actionButton(inputId = "endsession", label = "Send to R")
)
server <- function(input, output){
  observeEvent(input$endsession, {
    # value_from_shiny <<- input$value
    assign("value_from_shiny", input$value, envir = .GlobalEnv)
    stopApp()
  })
}
shinyApp(ui, server)

它可以正确启动应用程序,以交互方式接受输入,并使下游可以访问该输入。然而,这个解决方案(以及我发现的大多数其他解决方案)使用

<<-
assign(envir = .GlobalEnv)
选项,由于全局变量的分配,这可能会出现问题。或者,我考虑过将其写入一个临时文件,然后读入并删除,但这仍然感觉有问题。我也可以使用外部环境,但就副作用而言,这些感觉与全球环境存在相同的问题,但可能是最好的选择:

external_env <- environment()
...
assign("value_from_shiny", input$value, envir = external_env)
...
external_env$value_from_shiny

是否有更简单的方法从 Shiny 应用程序返回值?或者这不是他们应该做的,而

<<-
方法是我能得到的最好的方法?我希望将这种交互性构建到一个包中,其中该方法用于交互式地对数据集进行分类,因此我希望它相当健壮并且至少通过 CRAN 检查。我梦想的用例是应用程序的输出可以像普通变量一样返回并访问:

value_from_shiny <- shinyApp(ui, server)

但我也意识到这根本不是shinyApp 的工作原理。

r shiny variable-assignment interactive
1个回答
0
投票

您可以将想要返回的值放入

stopApp
,然后使用
runApp
获取。

library(shiny)
ui <- fluidPage(
  h3("Set the value for downstream analysis!"),
  sliderInput(inputId = "value", label="Value", min = 0, max = 10, value = 1),
  actionButton(inputId = "endsession", label = "Send to R")
)
server <- function(input, output){
  observeEvent(input$endsession, {
    stopApp(input$value)
  })
}

runApp(shinyApp(ui, server))
© www.soinside.com 2019 - 2024. All rights reserved.