在 R Shiny 中计算 NDVI
Calculating NDVI in Rshiny
我正在尝试创建一个闪亮的小应用程序,它可以根据从文件夹加载的 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)
但我收到此错误消息:
Warning: Error in stack.default: at least one vector element is required
有人可以帮我吗?
现在,闪亮的应用程序正在尝试从服务器中的任何内容创建堆栈,因为当应用程序加载时,input$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) })
}
编辑
您还可以根据 input$layer 是否为 null is.null(input$layer)
编写 if else 语句,当它为 null 时要求用户上传文件
我正在尝试创建一个闪亮的小应用程序,它可以根据从文件夹加载的 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)
但我收到此错误消息:
Warning: Error in stack.default: at least one vector element is required
有人可以帮我吗?
现在,闪亮的应用程序正在尝试从服务器中的任何内容创建堆栈,因为当应用程序加载时,input$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) })
}
编辑
您还可以根据 input$layer 是否为 null is.null(input$layer)
编写 if else 语句,当它为 null 时要求用户上传文件