我想创建一个Shiny应用,用户将在其中上传一个csv文件,上传后,下拉框将填充数据集中的所有变量。
当用户从下拉框中选择变量之一时,应在主面板中绘制相应的直方图。
这是我所做的
ui.r文件
library(shiny)
shinyUI(pageWithSidebar(
headerPanel( "Demand Forecast", "Flowserve"),
sidebarPanel(
fileInput('file1', 'Select csv file',accept=c('text/csv')
),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator', c(Comma=',',Tab='\t', Semicolon=';' )
),
tags$hr(),
selectInput("product", "Select: ","")
),
mainPanel(tableOutput('contents'),
plotOutput("hist")
)
))
server.r文件
library(shiny)
library(ggplot2)
shinyServer(function(input,output,session){
dataUpload<-reactive({
inFile<-input$file1
print(inFile)
if(is.null(inFile))
return(NULL)
dt_frame = read.csv(inFile$datapath, header=input$header, sep=input$sep)
updateSelectInput(session, "product", choices = names(dt_frame))
})
output$hist <- renderPlot({
dataset<- dataUpload()
hist(dataset[,dataset$product])
})
})
但是,当我运行此应用程序时,它给我一个错误类型为'closure'的错误对象,该对象无法子集化
请帮忙..
提前致谢
最佳答案
欢迎来到R闪亮的世界!
您想将所选列用于直方图-> hist(dataset[,input$product])
您的反应式函数不返回任何内容,但您已编写dataset<- dataUpload()
->将return()
添加到反应式函数
您还需要在renderPlot()
中进行错误检查
最小的工作示例:
library(shiny)
library(ggplot2)
server <- function(input, output, session) {
dataUpload<-reactive({
inFile<-input$file1
print(inFile)
if(is.null(inFile))
return(NULL)
dt_frame = read.csv(inFile$datapath, header=input$header, sep=input$sep)
updateSelectInput(session, "product", choices = names(dt_frame))
return(dt_frame)
})
#output$contents <- renderTable({
# dataset<- dataUpload()
# dataset
#})
output$hist <- renderPlot({
# we need error check also here
if(is.null(input$file1))
return(NULL)
dataset<- dataUpload()
hist(dataset[,input$product])
})
}
ui <- pageWithSidebar(
headerPanel( "Demand Forecast", "Flowserve"),
sidebarPanel(
fileInput('file1', 'Select csv file',accept=c('text/csv')
),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator', c(Comma=',',Tab='\t', Semicolon=';' )
),
tags$hr(),
selectInput("product", "Select: ","")
),
mainPanel(tableOutput('contents'),
plotOutput("hist")
)
)
shinyApp(ui = ui, server = server)
关于r - 如何从Shiny的下拉框中选择变量后动态创建直方图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29666221/