我正在尝试创建一个小的闪亮应用程序,该程序可以从文件夹中加载的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)
但是我收到此错误消息:
警告:堆栈错误。默认值:至少需要一个向量元素
有人可以帮我吗?
答案 0 :(得分:2)
现在,有光泽的应用程序正尝试从服务器中的任何内容创建堆栈,因为加载该应用程序时,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则要求用户上传文件