我通常对Shiny和R还是陌生的,我正在构建一个应用程序,允许用户导入数据,选择其变量,树数..ect等,然后通过随机森林脚本运行该程序,并显示输出。现在,我只是在处理输入,但是,我遇到了一个问题。用户可以导入CSV,但随后他们无法选择其变量(来自csv的标题)。我正在尝试使其具有反应性,因此用户首先必须导入其csv,然后弹出选择变量的选项(似乎很简单)。
这是我现在的代码: ui.R
我可能只是犯了一个愚蠢的错误,因为我不熟悉Shiny,但您的帮助将不胜感激。
答案 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]))
})
由于您以图像格式发布数据并且我没有输入文件,所以我没有测试此代码,但是希望这可以帮助您解决错误。