尝试从导入的数据集中选择变量时出现ShinyApp反应式错误

时间:2018-07-20 15:21:33

标签: r shiny random-forest

我通常对Shiny和R还是陌生的,我正在构建一个应用程序,允许用户导入数据,选择其变量,树数..ect等,然后通过随机森林脚本运行该程序,并显示输出。现在,我只是在处理输入,但是,我遇到了一个问题。用户可以导入CSV,但随后他们无法选择其变量(来自csv的标题)。我正在尝试使其具有反应性,因此用户首先必须导入其csv,然后弹出选择变量的选项(似乎很简单)。

这是我现在的代码:     ui.R

server.R

Error in Console

我可能只是犯了一个愚蠢的错误,因为我不熟悉Shiny,但您的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

一些背景信息

首先,我建议您通读此书,以更好地了解Shiny:Shiny Reactivity Overview中的反应性。这也有助于在Shiny上下文中进行变量作用域定义:Scoping Rules in Shiny Apps

问题

我认为此问题是由于您在server.R文件中的闪亮输出file_to_read范围内定义了变量output$input_file所致。当函数read.table()查找变量file_to_read时,该变量不存在,因为它仅在闪亮输出的范围内定义。

尝试创建无功值,然后在用户上载后将input$file值分配给它。您还必须将dat1变量转换为闪亮的反应式变量,因为您只能在其他反应式源(例如observe(),reactive(),observeEvent()等)的上下文中读取反应式值

file_to_read <- reactiveVal(NULL) # Set the value to NULL to initialize

output$input_file <- renderTable({
    if (is.null(input$file)) return () # Check there is an input file
    file_to_read(input$file) # Set the reactiveVal to the input file
})

# Make dat1 a reactive so it can be read within a shiny reactive
dat1 <- reactive({
    if(is.null(file_to_read()) return (NULL) # Check for input file in reactiveVal  
    read.table(file_to_read()$datapath, sep = input$sep, header = input$header)
})  
# Make an eventReactive to capture when there is read.table() data from dat1
reactive1 <- eventReactive(dat1, {
    if (is.null(dat1)) return ()
    D <- colnames(dat1)  
    return (list(D, D[1]))
})

由于您以图像格式发布数据并且我没有输入文件,所以我没有测试此代码,但是希望这可以帮助您解决错误。