Shiny应用运行正常但报'data' must be of a vector type NULL警告如何排查
问题定位与修复方案
问题根源
应用初始化时用户尚未上传CSV文件,input$file为空,你的inputdata()响应式函数会直接返回NULL,此时vectdata()没有做非空校验,直接对NULL执行dat[,input$HR1:input$HR24]索引、as.matrix转换操作,就触发了对应的警告。
等你上传合法CSV文件后,所有响应式变量都获取到有效输入,代码就能正常运行生成准确的绘图,和你观察到的现象一致。
修复方法
用shiny内置的req()函数声明依赖项,只有当依赖的响应式变量非空时才执行后续代码,不会抛出无效警告,修改后的server部分代码如下:
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({ # 先判断inputdata非空再执行后续操作 req(inputdata()) # 额外加HR参数合法性校验,避免用户误输入导致索引错误 req(input$HR1 <= input$HR24) 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({ # 声明依赖vectdata就绪,空值时不执行绘图代码 req(vectdata()) df <- diff_durations(vectdata()) plot(df) }) }
修改后初始化阶段不会再抛出警告,同时也兼容了用户误输入小时列序号的异常场景。
内容的提问来源于stack exchange,提问作者Vishnupriya
相关产品推荐
相关产品推荐

