首页 > 解决方案 > 代码运行良好,但显示错误闪亮

问题描述

我运行我闪亮的应用程序,我得到了情节。我交叉检查了情节,发现它是正确的。但我最初收到警告,如下所示。

'data' 必须是向量类型,为 'NULL'

在向代码添加更多行之前,我想了解问题出在哪里。

library(shiny)
library(zoo)

diff_durations <- function(vect_table){
  L = c(1,2,3,6,12,24,48)
  n = length(L)
  xx <- vect_table
  m = length(xx)
  D = matrix(0,m,n)
  E = matrix(0,m,n)
  for (i in 1:n) {
    D[,i] = rollsum(xx,L[i],0,align = "right")
    E[,i] = D[,i]/L[i]
  }
  return(E)
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file", "Choose observation precipitation CSV File", accept = ".csv"),
      checkboxInput("header", "Header", TRUE),
      numericInput("HR1","Mention the column number of Hour 1",value = 1),
      numericInput("HR24","Mention the column number of Hour 24",value = 1 )
    ),
    mainPanel(
      plotOutput('pl')
    )
  )
)
server <- function(input, output,session) {
  inputdata <- reactive({
    infile = input$file
    if(is.null(infile))
      return(NULL)
    read.csv(infile$datapath,header=input$header)
  })
  
  vectdata <- reactive({
    dat <- inputdata()
    A <- t(as.matrix(dat[,input$HR1:input$HR24]))
    B = as.numeric(as.vector(A))
    replace(B,is.na(B),0)
  })
  
  output$pl <- renderPlot({
    df <- diff_durations(vectdata())
    plot(df)
  })
  
}

shinyApp(ui, server)

控制台显示这些行。

  192: array
  191: as.matrix.default
  188: <reactive:vectdata> [~/.active-rstudio-document#43]
  186: .func
  183: contextFunc
  182: env$runWith
  175: ctx$run
  174: self$.updateValue
  172: vectdata
  170: renderPlot [~/.active-rstudio-document#49]
  168: func
  128: drawPlot
  114: <reactive:plotObj>
   98: drawReactive
   85: renderFunc
   84: output$pl
    4: runApp
    3: print.shiny.appobj
    1: source

任何帮助将不胜感激,谢谢。

标签: rshiny

解决方案


利用req等待文件上传。

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file", "Choose observation precipitation CSV File", accept = ".csv"),
      checkboxInput("header", "Header", TRUE),
      numericInput("HR1","Mention the column number of Hour 1",value = 1),
      numericInput("HR24","Mention the column number of Hour 24",value = 1 )
    ),
    mainPanel(
      plotOutput('pl')
    )
  )
)
server <- function(input, output,session) {
  inputdata <- reactive({
    infile = input$file
    if(is.null(infile))
      return(NULL)
    read.csv(infile$datapath,header=input$header)
  })
  
  vectdata <- reactive({
    req(inputdata())
    dat <- inputdata()
    A <- t(as.matrix(dat[,input$HR1:input$HR24]))
    B = as.numeric(as.vector(A))
    replace(B,is.na(B),0)
  })
  
  output$pl <- renderPlot({
    req(vectdata())
    df <- diff_durations(vectdata())
    plot(df)
  })
  
}

shinyApp(ui, server)

推荐阅读