Динамическое создание графиков на основе выбранных в selectInput элементах
Есть задача динамического создания графиков на основе выбранных в selectInput элементах, данные в selectInput загружаются из .csv файла(название колонок)
ui.r
##ui.R
library(shiny)
library(shinydashboard)
shinyUI(fluidPage(
titlePanel("Q"),
sidebarLayout(
sidebarPanel(
fileInput('file1','Chose CSV file',
accept = c('text/csv','text/comma-separated-values,text/plain','.csv')
),
#tags$hr(),
checkboxInput('header','Header',TRUE),
selectInput('column','Chose columns:', choices = NULL, selected = NULL, multiple = TRUE)
#uiOutput("column"),
),
mainPanel(
#uiOutput('mytabs'),
tabsetPanel(
tabPanel('Data',tableOutput('tbl')),
tabPanel('Histogram',plotOutput('graph')),
tabPanel('GG',textOutput('result'))
)
)
)
))
server.r
library(shiny)
library(DT) # need datatables package
choise<-function(file1,wheader){
if (is.null(file1))
return(NULL)
frm<-read.csv2(file1$datapath,header=wheader)
return(frm[1,])
}
fr<-function(file1,wheader,i){
if (is.null(file1))
return(NULL)
frm<-read.csv2(file1$datapath,header=wheader)
return(frm[,i])
}
shinyServer(function(input, output, session) {
output$tbl<-renderTable({inFile<-input$file1
if (is.null(inFile))
return(1)
read.csv2(inFile$datapath,header=input$header)
}, striped = TRUE, bordered = TRUE, hover = TRUE)
test<-reactive({
choise(input$file1,input$header)
})
updateSelectInput(session,'column','Choise column:', reactive(as.list(test())))
# output$column<-renderUI({
# selectInput("column","Chose columns:", as.list(test()), selected = NULL, multiple = TRUE)
# })
output$graph<-renderPlot({
f<-fr(input$file1,input$header,3)
plot(f,
ylim = c(0, 200),
col = 'green',
type = 'l')
}
)
})
Используя на серверной части:
output$column<-renderUI({
selectInput("column","Chose columns:", as.list(test()), selected = NULL, multiple = TRUE)
}
Позволило заполнять selectInput названием колонок, однако я не могу получить доступ к выбранным значениям. Мб проблема решается элементарно, однако это только моя первая программа на R, так что не судите строго.