如何在R Shiny中的global.R中使用反应全局变量

时间:2017-02-27 13:44:48

标签: r shiny global-variables

我在闪亮的App中有ui.Rserver.Rglobal.R

当我选择dataset并按actionButton时,我想使用反应式全局变量。

示例:

ui.R

fluidPage(
  titlePanel("Using global variable"),
  fluidRow(
      uiOutput("ui1"),
      uiOutput("ui2"),
      uiOutput("ui3")
    ),
  )
)

server.R

function(input, output) {

  output$ui1 <- renderUI({
     selectInput("dataset", "firstValue", choices = c("first", "second", "third")   
  })

  output$ui2 <- renderUI({
      actionButton("doIt", class="btn-primary", "change")
  })

  output$ui3 <- renderText({
      paste(catPath)
  })
}

global.R

catPath <<- paste(output$dataset, "/completed", sep="")

当我在first/completed中选择ui3 renderText时,first上的结果为dataset。然后按actionButton

如何完成此过程?

1 个答案:

答案 0 :(得分:3)

我同意@JohnPaul和@ Lee88,你的catPath可能属于server.R。话虽如此,我现在暂时保留它(假设你的MWE中还有其他原因)。

<强> global.R

catPath <- ""

我需要将它设置为某种东西以便以后可以引用,否则这里使用的值应该没有意义(尽管如果不采取任何措施它将被返回)。

<强> ui.R

我添加了“停止?”操作按钮,以便您可以“退出”您的应用并将catPath的值捕获到调用环境中。如果您不打算故意退出应用程序,则不需要。

fluidPage(
  titlePanel("Using global variable"),
  fluidRow(
    uiOutput("ui1"),
    uiOutput("ui2"),
    uiOutput("ui3"),
    actionButton("stopme", "Stop?")
  )
)

<强> server.R

我更改output$ui3以创建HTML对象(不执行计算),然后观察两个事件并对其进行操作。再说一次,如果你不需要“停止?”上面的按钮,你可能不需要在这里观察第二个。 (如果您确实使用它,请注意stopApp的参数将无形地返回给调用者。)

function(input, output, session) {
  output$ui1 <- renderUI({
    selectInput("dataset", "firstValue", choices = c("first", "second", "third"))
  })
  output$ui2 <- renderUI({
    actionButton("doIt", class="btn-primary", "change")
  })
  output$ui3 <- renderUI({
    textInput("myinput", "catPath", "")
  })
  observeEvent(input$doIt, {
    catPath <<- paste(input$dataset, "/completed", sep = "")
    updateTextInput(session, inputId = "myinput", value = catPath)
  })
  observeEvent(input$stopme, { stopApp(catPath); })
}

执行newCatPath <- runApp("path/to/dir")之类的内容。