我整理了一个过滤一堆东西的脚本。但是每当我运行它时,都会出现此错误:st_geometry' applied to an object of class "character"
奇怪的是,如果我在闪亮的应用程序外部运行它,像这样,效果很好:
mapView(nv %>% st_sf() %>% st_buffer(0) %>% group_by(super_region, region) %>% summarize(geometry = st_union(geometry)))
但是当我在下面的脚本中运行它时,它将返回该错误。我在做什么错?
library(tigris)
library(mapview)
library(leaflet)
library(sf)
library(dplyr)
library(shiny)
library(shinyWidgets)
**nv <- [Download shapefile here: https://github.com/gooponyagrinch/blob/blob/master/testdata.shp]**
sr <- nv %>% st_sf() %>% st_buffer(0) %>% group_by(super_region) %>% summarize(geometry = st_union(geometry))
sr_region <- nv %>% st_sf() %>% st_buffer(0) %>% group_by(super_region, region) %>% summarize(geometry = st_union(geometry))
region_turf <- nv %>% st_sf() %>% st_buffer(0) %>% group_by(region, turf) %>% summarize(geometry = st_union(geometry))
turf_area <- nv %>% st_sf() %>% st_buffer(0) %>% group_by(turf, areas) %>% summarize(geometry = st_union(geometry))
area <- nv %>% st_sf() %>% st_buffer(0) %>% group_by(areas) %>% summarize(geometry = st_union(geometry))
ui <- fluidPage(
fluidRow(
column(8,
width = 10, offset = 1,
tags$h3("Select Area"),
panel(
selectizeGroupUI(
id = "filters",
params = list(
SR = list(inputId = "super_region", title = "Super Region:"),
Reg = list(inputId = "region", title = "Region:"),
Turf = list(inputId = "turf", title = "Turf"),
Areas = list(inputId = "areas", title = "Areas:")
))
),
leafletOutput("test")
)
)
)
server <- function(input, output, session) {
res_mod <- callModule(
module = selectizeGroupServer,
id = "filters",
data = nv,
vars = c('super_region', 'region', 'turf', 'areas')
)
map_data <- reactive({
res <- ifelse(!is.null(input$areas), area %>% filter(areas %in% input$areas),
ifelse(!is.null(input$turf), turf_area %>% filter(turf %in% input$turf),
ifelse(!is.null(input$region), region_turf %>% filter(region %in% input$region),
ifelse(!is.null(input$super_region), sr_region %>% filter(super_region %in% input$super_region),
sr))))
})
output$test <- renderLeaflet({
res <- map_data()
mapview(res)@map
})
}
shinyApp(ui,server)
同样,如果我想运行,例如,在Shiny之外运行名为sr_region的对象,它可以正常运行,只是当我将其作为大型应用程序的一部分运行时。
出了什么问题?
答案 0 :(得分:0)
只需将ifelse()
函数替换为if ... else ...
控件,如下所示:
if(!is.null(input$areas))
res <- area %>% filter(areas %in% input$areas)
else
if(!is.null(input$turf))
res <- turf_area %>% filter(turf %in% input$turf)
else
if(!is.null(input$region))
res <- region_turf %>% filter(region %in% input$region)
else
if(!is.null(input$super_region))
res <- sr_region %>% filter(super_region %in% input$super_region)
else
res <- sr