我想基于服务器中下载的列列表创建一个动态的checkboxGroupInput
我尝试了全局变量updatecheckboxGroupInput和RenderUi
# UI.R
sidebarLayout(
sidebarPanel(
fileInput("fileInPath",
label= h4("Import danych"), accept=("text/csv")),
radioButtons('plott','Plot',c('ggplot2'='ggplot2', 'lattice'='lattice')
),
radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
inline = TRUE),
downloadButton('downloadReport',label="Wygeneruj raport"),
uiOutput("ListOfColumns")
),
#Server.R
shinyServer(function(input, output) {
# 3 wczytywanie danych
dataIn <- reactive({
inFile <- input$fileInPath
if (is.null(inFile)) {
return(NULL)
}
read.table(file=inFile$datapath,sep=";",dec=",",header=T,stringsAsFactors=FALSE)
})
output$ListOfColumns <- renderUI({
columns <- colnames(dataIn)
checkboxGroupInput("Columns", "Choose columns", columns)
})}
我希望下载文件中的列列表出现在checkboxGroupInput中。
答案 0 :(得分:0)
您接近了!
但是我觉得您示例中的主要错误位于倒数第二行
columns <- colnames(dataIn)
应该是
columns <- colnames(dataIn())
我使用了一个示例csv文件来测试文件读取和解析与您的示例稍有不同。
ui = fluidPage(
titlePanel("Sample"),
sidebarLayout(
sidebarPanel(
fileInput("fileInPath", "Choose File",
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
radioButtons('plott','Plot',c('ggplot2'='ggplot2', 'lattice'='lattice')
),
radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
inline = TRUE),
downloadButton('downloadReport',label="Wygeneruj raport"),
uiOutput("ListOfColumns")
),
mainPanel()
)
)
#Server.R
server = function(input, output) {
# 3 wczytywanie danych
dataIn <- reactive({
req(input$fileInPath)
read.csv(file=input$fileInPath$datapath)
})
output$ListOfColumns <- renderUI({
req(dataIn())
columns <- colnames(dataIn())
checkboxGroupInput("Columns", "Choose columns",columns)
})}
shinyApp(ui,server)
我使用mtcars
数据集对其进行了测试,可以使用
write.csv(mtcars,file = "~/Desktop/Data.csv",row.names = FALSE)
答案 1 :(得分:0)
您可以通过动态渲染UI来实现此目的,就像您之前尝试过的那样,只需对代码进行一些更改即可。但是,请确保将数据正确导入服务器。要对此进行检查,您可以在主面板中添加一个tableOutput
。
也可以通过在开始时隐藏checkboxGroup输入并通过控制if(nrow(dataIn)>0)
来显示数据来显示它,然后显示...来实现此目的...我对该程序包了解不多。
尝试这个,让我知道这是否解决了您的问题。使用dput()
向我们提供您的数据样本,以尝试更好。
我编辑了代码。您现在也可以看到数据框的头部。
ui<-fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("fileInPath",
label= h4("Import danych"), accept=("text/csv")),
radioButtons('plott','Plot',c('ggplot2'='ggplot2', 'lattice'='lattice')
),
radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
inline = TRUE),
downloadButton('downloadReport',label="Wygeneruj raport"),
uiOutput("ListOfColumns")
),
mainPanel(
tableOutput("datacheck")
)
)
)
#Server.R
shinyServer(function(input, output) {
# 3 wczytywanie danych
dataIn <- reactive({
req(input$fileInPath)
read.csv(input$fileInPath$datapath)
output$datacheck<-renderTable({
if (is.null(dataIn)) {
return(NULL)
}
head(dataIn())
})
columns <- reactive({colnames(dataIn())
})
output$ListOfColumns <- renderUI({
checkboxGroupInput("Columns", "Choose columns", choices=columns())
})
}