不知道如何在Shiny中设置反应值

时间:2013-09-19 13:27:38

标签: r shiny

我正在尝试构建一个Shiny应用程序,它接受许多参数(实验数量,交叉验证折叠数和输入数据文件),然后在后台运行一些.R脚本。但我不断收到以下错误:

“没有主动反应上下文时不允许操作。(你试图做一些只能在反应函数内完成的事情。)”

这是我的ui.R的代码片段:

library(shiny)

experiments <- list(
  "1" = 1,
  "3" = 3,
  "5" = 5,
  "10" = 10,
  "50" = 50
)
folds <- list(
  "1" = 1,
  "3" = 3,
  "5" = 5,
  "10" = 10
)

shinyUI(
  pageWithSidebar(
    headerPanel("Classification and Regression Models"),
    sidebarPanel(
      selectInput("experiments_number", "Choose Number of Experiments:",
                  choices = experiments)
      selectInput("folds_number", "Choose Number of Folds:", choices = folds),
      fileInput(
        "file1",
        "Choose a CSV file:",
        accept = c('text/csv', 'text/comma-separated-values', 'text/plain')
      )
    ),

以及我的server.R代码的开头:

shinyServer(function(input,output){
    # Server logic goes here.

    experimentsInput <- reactive({
        switch(input$experiments_number,
            "1" = 1,
            "3" = 3,
            "5" = 5,
            "10" = 10,
            "50" = 50)
    })

foldsInput <- reactive({
        switch(input$folds_input,
            "1" = 1,
            "3" = 3,
            "5" = 5,
            "10" = 10)
    })

if (is.null(input$file1$datapath))
                return(NULL)

source("CART.R")

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在CART.R中,您有dataset <- input$file1$datapath

您正在访问server.R中的此输入槽,但它不在“反应上下文”中,这是错误消息告诉您的内容。

要解决此错误,您必须将其包含在反应函数中。

ds <- reactive({
  dataset <- input$file1$datapath
})

并使用ds()

进行调用

更新

基于OP的澄清要求。这是一种方法:

在Server.R

source("CART.R") #which does NOT access reactive elements
#common functions go here. (non-reactive ones)

shinyServer(function(input, output) { 

  ds <- reactive({
    dataset <- input$file1$datapath
  })

  output$rt <- renderText({
    {  ds1 <- ds()
      #now ds1 is available in this function
      Do something with ds1
    }
  })

这是Shiny团队的完整示例。 Example 03_reactivity 您可以在加载Shiny库后键入runExample("03_reactivity")来运行它。

希望有所帮助。