这是来自mapedit
问题 github 页面的交叉帖子。我正在尝试构建一个闪亮的应用程序,允许用户在使用mapedit
包选择多边形后绘制数据子集。虽然我能够使用 成功绘制数据,但在删除选定的 mapedit 多边形后mapedit
,我无法刷新数据。$finished
这会产生两个我尚未确定解决方法的错误,1)如果情节崩溃,如错误下方的 gif 中所示the argument is of length zero
,以及 2)如果情节没有崩溃,最后选择的$finished
数据仍然无法清除来自情节的数据。
有什么办法可以解决这些问题吗?这主要发生在绘制两个以上的多边形然后删除时。虽然我认为会有一个被动的解决方法,但到目前为止我还没有成功。
下面是来自 r-spatial博客mapedit 的可重现示例 - 0.2.0 中的更新。在我闪亮的应用程序中,我使用 mapedit 包使用对象 ID 对不同的时间序列进行子集化,并在 plotly 中绘制时间序列。我相信可以使用下面的可重现示例来解决根本问题。
library(sf)
# make the coordinates a numeric matrix
qk_mx <- data.matrix(quakes[,2:1])
# convert the coordinates to a multipoint feature
qk_mp <- st_multipoint(qk_mx)
# convert the multipoint feature to sf
qk_sf <- st_sf(st_cast(st_sfc(qk_mp), "POINT"), quakes, crs=4326)
# run select demo for the quake data
# we will need the qk_sf
# to test
# plot(qk_sf)
library(mapedit)
library(mapview)
library(shiny)
ui <- fluidPage(
fluidRow(
# edit module ui
column(6, editModUI("editor")),
column(
6,
h3("Boxplot of Depth"),
plotOutput("selectstat")
)
)
)
server <- function(input, output, session) {
# edit module returns sf
edits <- callModule(editMod, "editor", mapview(qk_sf)@map)
output$selectstat <- renderPlot({
req(edits()$finished)
qk_intersect <- st_intersection(edits()$finished, qk_sf)
req(nrow(qk_intersect) > 0)
boxplot(
list(
all = as.numeric(qk_sf$depth),
selected = as.numeric(qk_intersect$depth)
),
xlab = "depth"
)
})
}
shinyApp(ui, server)
虽然我已经在 mapedit github问题页面和 r-spatial 中发布了这个,但我认为是否有不需要包修复的解决方案是值得的。我在这里和这里找到了 selectMod 的两种解决方法,但是 editMod 源代码要复杂得多,所以我发现它超出了我的能力来适应这个解决方案。
非常感谢,我断断续续地努力解决这个问题几个星期,我很想解决这个问题并关闭这个项目。