我设计了一个使用闪亮的工具,要求用户上传通过radiobutton设计的csv或xlsx文件。现在有四个条件
现在对于第3点和第4点,我检查是否存在任何不匹配,如果是,则警告用户重新加载正确的文件类型。但是,没有检测到第4点,并且工具通过自己的错误。
ui code
library(shiny)
library(xlsx)
library(tools)
shinyUI(fluidPage(
titlePanel("fileinput"),
sidebarLayout(
sidebarPanel(
radioButtons("filetype", "Select file type",choices=c("csv file","xlsx file")),
fileInput("file1","upload",accept = c("text/csv","text/comma-separated-values,text/plain",".csv",".xlsx",".xls"))
),
mainPanel(
uiOutput("Image_Data")
)
)
)
)
服务器代码
shinyServer(function(input, output) {
# loading data
data <- reactive({
if(input$filetype=="xlsx file"){
inFile <- input$file1
if (is.null(inFile))
return(NULL)
a<-read.xlsx(inFile$datapath, sheetIndex=1,header =TRUE)
as.data.frame(a)
}else{
inFile <- input$file1
if (is.null(inFile))
return(NULL)
a<-read.csv(inFile$datapath,header =TRUE,stringsAsFactors = TRUE)
as.data.frame(a)
}})
# info of the file
output$about_file<-renderTable({
input$file1})
# to display data
output$display <- renderDataTable({
data()})
# passing to UI finally
output$Image_Data<-renderUI({
if(is.null(data())){
h1("forecasting tool")
}
else if(input$filetype=="csv file" & input$file1$type != "text/csv"){
sprintf("reload correct file type")}
else if(input$filetype=="xlsx file" & input$file1$type !=
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"){
sprintf("reload correct file type")}
else if(input$filetype=="xlsx file" & input$file1$type !=
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"){
sprintf("reload correct file type")
}else{
tabsetPanel(tabPanel("DATA",dataTableOutput("display")),
tabPanel("aboufile", tableOutput("about_file")))
}})})
我安装了java 64位,这是在r。
中使用excel文件所必需的答案 0 :(得分:0)
您的问题是您在检查datatyp之前正在读取文件。在阅读文件之前,请尝试检查文件的结尾。
例如,您可以检查文件是否是具有类似此内容的excel文件
regexpr("\\.xlsx",input$file1) != -1
答案 1 :(得分:0)
对不起,我的RnD基本缺乏。
问题不是闪亮而是read.xlsx。
read.xlsx不会加载除xlsx之外的任何其他文件类型,因此抛出错误而read.csv不会抛出任何错误(它会发出警告)并加载其他类型(xlsx),尽管加载的文件在加载后变得无关紧要。
我所做的只是使用了tryCatch函数并相应地修改了else。 以下是server.r的更正代码
shinyServer(function(input, output) {
# loading data
data <- reactive({
if(input$filetype=="xlsx file"){
inFile <- input$file1
if (is.null(inFile))
return(NULL)
a<-tryCatch(read.xlsx(inFile$datapath, sheetIndex=1,header =TRUE),error = function(e) return("wrong"))
as.data.frame(a)
}else{
inFile <- input$file1
if (is.null(inFile))
return(NULL)
a<-read.csv(inFile$datapath,header =TRUE,stringsAsFactors = TRUE)
as.data.frame(a)
}})
# info of the file
output$about_file<-renderTable({
input$file1})
# to display data
output$display <- renderDataTable({
data()})
# passing to UI finally
output$Image_Data<-renderUI({
if(is.null(data())){
h1("forecasting tool")
}else if(input$filetype =="csv file" & input$file1$type != "text/csv"){
h4(br(),br(),"Mismatch in formats of file selected and uploaded!!",style = "color: red;")
}else if(length(data())==1){
#h4(br(),br(),"Mismatch in formats of file selected and uploaded!",style = "font-style: italic;font-weight: bold;color: red;text-align: center;")
h4(br(),br(),"Mismatch in formats of file selected and uploaded!",style = "color:red")
#sprintf("testing")
}else{
tabsetPanel(tabPanel("DATA",dataTableOutput("display")),
tabPanel("aboufile", tableOutput("about_file")))
}})})