即使我上传新文件,闪亮也会显示相同的结果

时间:2016-12-10 15:45:06

标签: r shiny

我正在尝试构建一个闪亮的应用程序,其中使用了来自R tabulizer包的extract_text和extract_table函数。但问题在于,我上传的第一个文件的结果仍然存在,即如果我上传pdf文件会显示所需的结果,但即使我上传新文件,结果也不会改变,除非我停止并开始新的实例。这是我的server.R代码 -

     shinyServer(function(input,output,session) {
        fund<-reactive({
        inFile <- input$file1
        if (is.null(inFile))
        {return(NULL)} else {
          rr<-extract_text(inFile$datapath, pages =2)
          e1<-extract_tables(inFile$datapath, pages =1)
          e2<-extract_tables(inFile$datapath, pages =2)
          rr<-gsub("\r\n", " ", rr)
          ss<-unlist(strsplit(rr, "Total & WAR:"))
          gr<-grep("Reverse Repo With Bank", ss)

          if (length(gr)>=1) {
            sk<-gsub("(?<=[\\s])\\s*|^\\s+|\\s+$", "", ss[gr], perl=T) 
            sn<-unlist(strsplit(sk, " ", fixed=T))
            grp<-grep("Limited", sn)
            dm<-matrix(nrow=length(grp), ncol=4)
            party<-c()
            for (i in 1:length(grp)){
              dm[i,]<-sn[(grp[i]+1):(grp[i]+4)]
              party[i]<-paste(sn[(grp[i]-2):(grp[i])],sep="", collapse=" ")
            }
            dm<-as.data.frame(dm)
            names(dm)<-c("Amount", "Rate", "DealDate", "MaturityDate" )
            dm$PartyName<-party
            dm$Tenure<-rep("", times=nrow(dm))
            dm<-dm[,c(5:6,1:4)]
            dn<-data.frame(PartyName="Product Name : Reverse Repo with Bank", Tenure="", Amount="", Rate="", DealDate="", MaturityDate="")
            dnn<-data.frame(PartyName="Total & WAR:", Tenure="", Amount="", Rate="", DealDate="", MaturityDate="")
            dm<-rbind(dn,dm,dnn)
          }


          if (length(e1)>1) {
            l1<-dim(e1[[1]])[1]
            l2<-dim(e1[[2]])[1]
            m<-c(l1,l2)
            e<-e1[[which(m==max(m))]]
          } else {e=e1[[1]]}

          gop<-grep("Party Name", e[,1], fixed=T)
          e<-e[-(1:(gop-1)),]
          e[,3]<-gsub("(?<=[\\s])\\s*|^\\s+|\\s+$", "", e[,3], perl=T) 

          if (ncol(e)==4){
            ss<-strsplit(e[,3], " ")
            s1<-sapply(ss, function(x) x[1])
            s2<-sapply(ss, function(x) x[2])
            sss<-strsplit(e[,4], " ")
            s1s<-sapply(sss, function(x) x[1])
            s2s<-sapply(sss, function(x) x[2])
            e<-cbind(e[,1:2],s1,s2,s1s,s2s)
          } else if (ncol(e)==5) {
            sss<-strsplit(e[,5], " ")
            s1s<-sapply(sss, function(x) x[1])
            s2s<-sapply(sss, function(x) x[2])
            e<-cbind(e[,1:4],s1s,s2s)
          }
          d<-rbind(e[-1,],e2[[1]][-1,])
          d<-as.data.frame(d)
          colnames(d)<-c("PartyName", "Tenure", "Amount", "Rate", "DealDate", "MaturityDate")


          if (length(gr)>=1){
            d<-rbind(d,dm)
          }
          row.names(d)<-1:nrow(d)

          d$Rate<-as.numeric(as.character(d$Rate))
          w<-which(d$Rate>7)
          d<-d[-w,]
          d$IncomeType<-rep(NA, nrow(d))
          d$Rate[is.na(d$Rate)]<-0
          levels<-c(-1,1,5,7)
          labels<-c("Invalid","Low Income", "Medium Income")
          d$IncomeType<-cut(d$Rate, levels, labels)
          d$Period<-as.Date(d$MaturityDate, format="%d/%m/%Y")-Sys.Date()
          d$Period[is.na(d$Period)]<-1
          levels1<-c(-50,-1,1,15,30,5000)
          labels1<-c("Already Matured", "Within 1 Day", "Within 2 to 15 Days", "Within 16 to 30 Days", "More than 1 Month")
          d$MaturityType<-cut(as.numeric(d$Period), levels1, labels1)

          m<-grep("Product Name : Commercial Paper", d[,1], fixed=T)
          d<-d[-m,]
          g1<-grep("Product Name",d[,1], fixed=T)
          name<-d[g1,1]
          name<-as.character(name)
          name<-sapply(strsplit(name,": "), "[", 2)
          g2<-grep("Total & WAR",d[,1], fixed=T)
          w<-which(d[,1]=="Product Name : Call Borrowing with Bank")
          if (length(w)>=1){
            d<-d[-(g1[which(g1==w)]:g2[which(g1==w)]),]
            name<-name[-which(g1==w)]
            g1<-grep("Product Name",d[,1], fixed=T)
            g2<-grep("Total & WAR",d[,1], fixed=T)
          }
          Product<-c()
          for (i in 1: length(g1)) {
            Product[(g1[i]):(g2[i])]<-name[i]
          }
          d$Product<-Product

          d<-d[!(is.na(d$DealDate)|d$DealDate==""),]


          d$Amount<-as.numeric(gsub(",", "", d$Amount))
          Remaining<-as.Date(d$MaturityDate, format="%d/%m/%Y")-Sys.Date()
          d$Remaining<-ifelse(is.na(Remaining)!=TRUE, Remaining, "ON CALL")


          d<-d[order(d$IncomeType,d$Product),]
          d<-d[,c(1,10,3,4,7,5,6,11)]
          d$DealDate<-as.character(d$DealDate)
          d$MaturityDate<-as.character(d$MaturityDate)

          d$Period<-as.Date(d$MaturityDate, format="%d/%m/%Y")-Sys.Date()
          d$Period[is.na(d$Period)]<-1
          levels1<-c(-5000,0,1,15,30,5000)
          labels1<-c("Already Matured", "Matures Next Day", "In Between 2 to 15 Days", "In Between 16 to 30 Days", "More than 1 Month")
          d$MaturityType<-cut(as.numeric(d$Period), levels1, labels1)

          d1<-d[,1:8]
          d1<-d1[order(d$IncomeType,d$Product),]

          rate<-sum(as.numeric(d1$Amount)*as.numeric(d1$Rate)/sum(as.numeric(d1$Amount)))

          d1<-as.data.frame(apply(d1, 2, function(x) gsub("^\\s+|\\s+$", "", x)), stringsAsFactors = F)

          d1$MaturityDate[is.na(d1$MaturityDate)]<-""


          d1[(nrow(d1)+1),]<-c("Total","",sum(as.numeric(d1$Amount)),rate, rep("", times=4))
          row.names(d1)<-1:nrow(d1)

          tt<-daply(d,.(IncomeType, Product), summarize, sum(Amount),.drop_i = F)
          tt<-tt[-1,]
          rrr<-rowSums(apply(tt,2, as.numeric))
          tt<-cbind(tt,Total=rrr)
          cc<-colSums(apply(tt, 2, as.numeric))
          tt<-rbind(tt,Total=cc)

          tt1<-daply(d,.(IncomeType, MaturityType), summarize, sum(Amount),.drop_i = F)
          tt1<-tt1[-1,]
          rrr<-rowSums(apply(tt1,2, as.numeric))
          tt1<-cbind(tt1,Total=rrr)
          cc<-colSums(apply(tt1, 2, as.numeric))
          tt1<-rbind(tt1,Total=cc)
          ECRR<-as.numeric(gsub(",","",e2[[2]][2,2]))-as.numeric(gsub(",","",e2[[2]][1,2]))
          if(ECRR<0){
            ECRR<-0
          } else {ECRR=ECRR}
          ECRR<-data.frame(ECRR)
          names(ECRR)<-"OMG"
          list(ECRR=ECRR,tt=tt,tt1=tt1,d1=d1)}
      })  
      output$fileUploaded <- reactive({
        return(!is.null(fund()))
      })
      outputOptions(output, 'fileUploaded', suspendWhenHidden=FALSE)
      name<-c("ECRR","tt","tt1","details")
      save.xlsx <- function (file, ...)
      {
        require(xlsx, quietly = TRUE)
        objects <- list(...)
        fargs <- as.list(match.call(expand.dots = TRUE))
        objnames <- as.character(fargs)[-c(1, 2)]
        nobjects <- length(objects)
        for (i in 1:nobjects) {
          if (i == 1)
            write.xlsx(objects[[i]], file, sheetName = name[i])
          else write.xlsx(objects[[i]], file, sheetName = name[i],
                          append = TRUE)
        }
        print(paste("Workbook", file, "has", nobjects, "worksheets."))
      }
      output$F<-renderTable({fund()$ECRR})
      output$G<-renderTable({fund()$tt},rownames=T)
      output$H<-renderTable({fund()$tt1},rownames=T)
      output$I<-renderTable({fund()$d1},rownames=T)
      output$downloadData <- downloadHandler(
        filename = "ALM.xlsx",
        content = function(file) {
          save.xlsx(file,fund()$ECRR,fund()$tt,fund()$tt1,fund()$d1)
        }
      )
})

和ui.R

 library(shiny)
shinyUI(pageWithSidebar (
  headerPanel( "Fund"),
  sidebarPanel(width=3,
               fileInput('file1', 'Choose a file to upload',
                         accept = c(
                           '.pdf'
                         )),
               helpText("(Only .pdf files can be uploaded"),
               conditionalPanel("output.fileUploaded",
                                downloadButton('downloadData'))
  ),
  mainPanel (
    tabsetPanel(
      tabPanel("ECRR", tableOutput("F")),
      tabPanel("Product wise Distribution", tableOutput("G")),
      tabPanel("Maturity wise Distribution", tableOutput("H")),
      tabPanel("Details", tableOutput("I"))
    ))
)
)

如果有人想测试我要在这里上传的文件,其中有2个 [文件1] [1]

[文件2] [2]

对于非常混乱的代码感到抱歉,并提前致谢。

0 个答案:

没有答案