我正在尝试创建一个应用,用户可以上传CSV然后与数据进行交互。 具体问题是我未能将读取的文件中的列标题传递给selectInput函数。
如果你注释掉观察功能的最后几行,应用程序可以正常工作。已经尝试了很多选项,使用被动而不是renderTable等。有一些类似的问题围绕着改变选择输入,但是没有我可以从读入的文件中看到。似乎缺少任何内容&#39 ;首先是问题?
require(shiny)
runApp(
list(
ui = fluidPage(
sidebarPanel(fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
selectInput("inSelect", "Select something", choices = "Pending Upload")
),
mainPanel(
tableOutput("contents"))
),
server = function(input, output) {
output$contents <- renderTable({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
read.csv(inFile$datapath)
})
observe({
updateSelectInput(session, "inSelect", choices = names(contents()))
})
}
)
测试CSV
Col1,Col2,Col3
2,3,4
5,6,7
答案 0 :(得分:1)
您的代码存在一些问题。要使updateSelectInput
生效,您需要将session
对象传递给shinyServer
函数。
然后,您必须创建一个读取输入文件的reactive
上下文。这是必需的,因为此操作的结果既用于创建输出表,也用于更改selectInput的值。
这应该有效:
server = function(input, output, session) {
contentsrea <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
read.csv(inFile$datapath)
})
output$contents<-renderTable({contentsrea()})
observe({
updateSelectInput(session, "inSelect", choices = names(contentsrea()))
})
}