我正在尝试构建一个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")
有什么想法吗?
谢谢!
答案 0 :(得分:3)
在CART.R中,您有dataset <- input$file1$datapath
行
您正在访问server.R中的此输入槽,但它不在“反应上下文”中,这是错误消息告诉您的内容。
要解决此错误,您必须将其包含在反应函数中。
ds <- reactive({
dataset <- input$file1$datapath
})
并使用ds()
基于OP的澄清要求。这是一种方法:
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")
来运行它。
希望有所帮助。