在Rshiny中计算NDVI

问题描述

我正在尝试创建一个小的闪亮应用程序,该程序可以从文件夹中加载的tiff文件中绘制NDVI。

这就是我所做的:

library(shiny)
library(leaflet)
library(dbplyr)
library(raster)
library(rgdal)



ui<-fluidPage(
  
  titlePanel("NDVI calculation"),sidebarPanel(
    fileInput('layer','Choose Layer',multiple=FALSE,accept='tiff')
  ),imageOutput(outputId = "ndvi")
  
  
)

server<-function(input,output) {
  
    output$ndvi <- renderPlot({
     
      S2 <- input$layer
      
      S2 <- stack(S2)
      
      S2 <- brick(S2)
      
      S2_ndvi <- (S2[[4]] - S2[[1]]) / (S2[[4]] + S2[[1]])
      

      
      plot(S2_ndvi,main = "NDVI of site 12RD8",axes = FALSE,Box = FALSE)    })
    
    
  }
  
  
  


shinyApp( ui=ui,server=server)

但是我收到此错误消息:

警告:堆栈错误认值:至少需要一个向量元素

有人可以帮我吗?

解决方法

现在,有光泽的应用程序正尝试从服务器中的任何内容创建堆栈,因为加载该应用程序时,input $ layer为null。在上载图层之前隐藏该错误的最简单方法是使用 type pickup_time insert_time first_value MAN 2020-11-01 03:00:00 2020-11-01 01:00:00 2020-11-01 04:00:00 CAT 2020-11-02 11:00:00 2020-11-02 05:00:00 2020-11-02 12:00:00 MAN 2020-11-01 09:00:00 2020-11-01 06:00:00 2020-11-01 10:00:00 。您将所需的输入放置在req()内,除非这些输入具有值,否则该应用将不会运行该代码块。

req()

修改 您还可以根据input $ layer是否为null server<-function(input,output) { output$ndvi <- renderPlot({ req(input$layer) S2 <- input$layer S2 <- stack(S2) S2 <- brick(S2) S2_ndvi <- (S2[[4]] - S2[[1]]) / (S2[[4]] + S2[[1]]) plot(S2_ndvi,main = "NDVI of site 12RD8",axes = FALSE,box = FALSE) }) } 编写if语句,如果为null则要求用户上传文件