我正在尝试创建一个小的、闪亮的应用程序,它可以从从文件夹加载的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)但我得到了一条错误信息:
警告:stack.default中的错误:至少需要一个向量元素
有人能帮帮我吗?
发布于 2020-11-04 20:07:43
现在,这个闪亮的应用程序正在尝试从服务器中的任何东西创建一个堆栈,因为当应用程序加载时,输入$layer是空的。在上传层之前,最简单的隐藏错误的方法是使用req()。在req()中放置所需的输入,应用程序将不会运行这段代码,除非这些输入有一个值。
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 语句,当它为空时,请用户上传一个文件
https://stackoverflow.com/questions/64678531
复制相似问题