我有一个带有navbarPage的代码,用户可以选择他想要的测试,然后上传文件,选择选项并下载结果。
我的问题:如何组织代码以了解用户选择了哪个测试?是否按照他的要求继续执行我的代码?
当我只有一个fileInput时,我的代码正常运行,但是当我添加第二个fileInput时,停止在mainPage上以表格形式显示我的数据,而我的downloadButton变得发疯了。
我的代码:
ui <- navbarPage(title = "DadosFacil", fluid = TRUE, theme = shinytheme("cosmo"),
#---- TABA DE NORMALIDADE
tabPanel("Normalidade", id = "NormalTab",
sidebarLayout(
sidebarPanel(
helper("",
colour = "black",
type = "inline",
title = "Upload do arquivo",
size = "s",
content = "Selecione apenas um arquivo em documento de texto (.txt), para mais informacoes sobre como organizar seu arquivo acesse nosso faq."),
fileInput("file1", "Escolha seus dados em .txt", #Ill only accept .txt files
accept =".txt"),
helper("",
colour = "black",
type = "inline",
title = "Ajuda",
size = "s",
content = "Marque se seu arquivo possui os nomes das variaveis na primeira linha"),
checkboxInput("header", "Header",value = TRUE),
helper("",
colour = "black",
type = "inline",
title = "Separador Decimal",
size = "s",
content = "Selecione como voce separou seus numeros no seu arquivo, comumente no Brasil se utiliza a virgula, nos outros paises o ponto. Note que caso selecione errado, obtera um erro."),
radioButtons("decimal", "Ponto ou Virgula: ",
choices = c(Virgula = ",", Ponto = "."),
selected = ","),
tags$hr(), #Linha horizontal
downloadButton("downloadData", "Download")
),
mainPanel(
dataTableOutput("Previa")
)
)
),
#---ABA DA ANOVA
navbarMenu("ANOVA",
#---DELINEAMENTO INTEIRAMEINTE CASUALIZADO
tabPanel("DIC", id = "DicTab",
sidebarLayout(
sidebarPanel(
helper("",
colour = "black",
type = "inline",
title = "Upload do arquivo",
size = "s",
content = "Selecione apenas um arquivo em documento de texto (.txt), para mais informacoes sobre como organizar seu arquivo acesse nosso faq."),
fileInput("file2", "Escolha seus dados em .txt -> DIC", #Ill only accept .txt files
accept =".txt"),
helper("",
colour = "black",
type = "inline",
title = "Ajuda",
size = "s",
content = "Marque se seu arquivo possui os nomes das variaveis na primeira linha"),
checkboxInput("header", "Header",value = TRUE),
helper("",
colour = "black",
type = "inline",
title = "Separador Decimal",
size = "s",
content = "Selecione como voce separou seus numeros no seu arquivo, comumente no Brasil se utiliza a virgula, nos outros paises o ponto. Note que caso selecione errado, obtera um erro."),
radioButtons("decimal", "Ponto ou Virgula: ",
choices = c(Virgula = ",", Ponto = "."),
selected = ","),
tags$hr(), #Linha horizontal
downloadButton("downloadData", "Download")
),
mainPanel(
dataTableOutput("Previa")
)
)
),
tabPanel("DBC",
sidebarLayout(
sidebarPanel(
),
mainPanel(
)
)
),
tabPanel("DQL",
sidebarLayout(
sidebarPanel(
),
mainPanel(
)
)
)
)
)
server <- function(input, output, session) {
observe_helpers()
datasetInputNormal <-reactive({
req(input$file1)
tryCatch({
df <- read.table(input$file1$datapath,
header = input$header,
sep = "\t",
dec = input$decimal)
},
error = function(e){
#Retorna error se der algum problema
stop(safeError(e))
})
return(df)
})
datasetInputDic <-reactive({
req(input$file2)
tryCatch({
df <- read.table(input$file2$datapath,
header = input$header,
sep = "\t",
dec = input$decimal)
},
error = function(e){
#Retorna error se der algum problema
stop(safeError(e))
})
return(df)
})
output$Previa <- DT::renderDataTable(DT::datatable(datasetInput()))
output$NormalidadeDownload <- downloadHandler(
filename = function(){
paste("Resul_",input$file1$name, sep = "")
},
content = function(file){
if(input$id == "NormalTab"){
writeLines(VariosNormal(datasetInputNormal()), con = file, sep = "" ) #Call my function VariosNormal()
} else if(input$id == "DicTab"){
writeLines(Teste_DIC(datasetInputDic()), con = file, sep = "" ) #Call my function Teste_DIC()
}
}
)
}
shinyApp(ui, server)
答案 0 :(得分:0)
我终于想出了解决方法。阅读此问题:R Shiny fileInput multiple filetypes。我注意到不能有两个具有相同ID的输出,所以我为具有不同ID的所有内容创建了另一个输出并正常工作! 但是我的问题是:有什么办法可以解决这个问题?因为在我的应用程序中,我将有20多个标签,每个标签都有自己的os按钮,唯一的方法是拥有像这样的大量代码?
我的代码已修复:
ui <- navbarPage(title = "DadosFacil", fluid = TRUE, theme = shinytheme("cosmo"),
#---- TABA DE NORMALIDADE
tabPanel("Normalidade", id = "NormalTab",
sidebarLayout(
sidebarPanel(
helper("",
colour = "black",
type = "inline",
title = "Upload do arquivo",
size = "s",
content = "Selecione apenas um arquivo em documento de texto (.txt), para mais informacoes sobre como organizar seu arquivo acesse nosso faq."),
fileInput("fileNormal", "Escolha seus dados em .txt", #Ill only accept .txt files
accept =".txt"),
helper("",
colour = "black",
type = "inline",
title = "Ajuda",
size = "s",
content = "Marque se seu arquivo possui os nomes das variaveis na primeira linha"),
checkboxInput("headerNormal", "Header",value = TRUE),
helper("",
colour = "black",
type = "inline",
title = "Separador Decimal",
size = "s",
content = "Selecione como voce separou seus numeros no seu arquivo, comumente no Brasil se utiliza a virgula, nos outros paises o ponto. Note que caso selecione errado, obtera um erro."),
radioButtons("decimalNormal", "Ponto ou Virgula: ",
choices = c(Virgula = ",", Ponto = "."),
selected = ","),
tags$hr(), #Linha horizontal
downloadButton("downloadNormal", "Download")
),
mainPanel(
dataTableOutput("PreviaNormal")
)
)
),
#---ABA DA ANOVA
navbarMenu("ANOVA",
#---DELINEAMENTO INTEIRAMEINTE CASUALIZADO
tabPanel("DIC", id = "DicTab",
sidebarLayout(
sidebarPanel(
helper("",
colour = "black",
type = "inline",
title = "Upload do arquivo",
size = "s",
content = "Selecione apenas um arquivo em documento de texto (.txt), para mais informacoes sobre como organizar seu arquivo acesse nosso faq."),
fileInput("fileDic", "Escolha seus dados em .txt -> DIC", #Ill only accept .txt files
accept =".txt"),
helper("",
colour = "black",
type = "inline",
title = "Ajuda",
size = "s",
content = "Marque se seu arquivo possui os nomes das variaveis na primeira linha"),
checkboxInput("headerDic", "Header",value = TRUE),
helper("",
colour = "black",
type = "inline",
title = "Separador Decimal",
size = "s",
content = "Selecione como voce separou seus numeros no seu arquivo, comumente no Brasil se utiliza a virgula, nos outros paises o ponto. Note que caso selecione errado, obtera um erro."),
radioButtons("decimalDic", "Ponto ou Virgula: ",
choices = c(Virgula = ",", Ponto = "."),
selected = ","),
tags$hr(), #Linha horizontal
downloadButton("downloadDic", "Download")
),
mainPanel(
dataTableOutput("PreviaDic")
)
)
),
tabPanel("DBC",
sidebarLayout(
sidebarPanel(
),
mainPanel(
)
)
),
tabPanel("DQL",
sidebarLayout(
sidebarPanel(
),
mainPanel(
)
)
)
)
)
server <- function(input, output, session) {
observe_helpers()
#--- NORMAL TAB
datasetInputNormal <-reactive({
req(input$fileNormal)
tryCatch({
df <- read.table(input$fileNormal$datapath,
header = input$headerNormal,
sep = "\t",
dec = input$decimalNormal)
},
error = function(e){
#Retorna error se der algum problema
stop(safeError(e))
})
return(df)
})
output$PreviaNormal <- DT::renderDataTable(DT::datatable(datasetInputNormal()))
output$downloadNormal <- downloadHandler(
filename = function(){
paste("Resul_Normal",input$fileNormal$name, sep = "")
},
content = function(file){
writeLines(VariosNormal(datasetInputNormal()), con = file, sep = "" ) #Call my function VariosNormal()
}
)
#---DIC TAB
datasetInputDic <-reactive({
req(input$fileDic)
tryCatch({
df <- read.table(input$fileDic$datapath,
header = input$headerDic,
sep = "\t",
dec = input$decimalDic)
},
error = function(e){
#Retorna error se der algum problema
stop(safeError(e))
})
return(df)
})
output$PreviaDic <- DT::renderDataTable(DT::datatable(datasetInputDic()))
output$downloadDic <- downloadHandler(
filename = function(){
paste("Resul_Dic",input$fileDic$name, sep = "")
},
content = function(file){
writeLines(Teste_DIC(datasetInputDic()), con = file, sep = "" ) #Call my function Teste_Dic
}
)
}
shinyApp(ui, server)