我正在使用 rgdal 和 RSAGA 插件开发一些带有 R 脚本的地理分析软件。我最近发现了闪亮的插件,我很高兴将我的循环控制器包装在 UI 中是多么容易。不幸的是,我遇到了所需的反应功能问题,使复选框组值(那些是单独的生态区)在复选框中绘制每个选定生态区轮廓的反应预览。
我有一个带有 110 个生态区(244、278、302 等)的整数列表的 checkboxGroupInput 和一个用于反应输出的 outputPlot 处理程序。
为了获得要点,读取形状文件以提取复选框组('ed_all')的生态区列表,并提取具有每个生态区轮廓的形状('xcheck')。从本质上讲,我正在尝试完成两件事:
1 - 制作一个反应变量“ed_list”,它会在使用复选框选择生态区时更改整数列表
2 - 使用反应变量“ed_list”和“xcheck”形状进行反应多边形相交,以绘制所选生态区的反应图。
我目前正在使用包裹在响应式命令中的 rsaga.geoprocessor 来进行交集,但如果有更好的方法,我愿意接受建议。每次我尝试执行此代码时,它都会给我...
“.getReactiveEnvironment()$currentContext() 中的错误:如果没有活动的反应上下文,则不允许操作。(您试图做一些只能从反应函数内部完成的事情。)”
或类似的东西。
以下是与我的问题相关的剪辑代码:
ui.r
library(shiny)
library(rgdal)
setwd("D:\\BC_soil_map")
ed <- readOGR(".\\BC_data\\BC_Shapes\\BC_soils\\Soil_Polygons_SLC", layer = "EcoDistricts_BC")
ed_all <- ed$ECODISTRIC
ed_null <- ed$EDnull
shinyUI(pageWithSidebar(
headerPanel(div(align = "center",
"Soil Mapping Data-Quilt Application")),
sidebarPanel(div(align = "center",
h4("Select and EcoDistrict"),
checkboxGroupInput("ed_chkbx",
label = "",
choices = ed_all,
selected = ed_all))),
mainPanel(div(align = "center",
h4("Preview"),
plotOutput("preview",
width = "500px",
height = "500px"))
))
这是代码的服务器部分..
server.R
library(shiny)
library(RSAGA)
library(rgdal)
setwd("D:\\BC_soil_map")
ed <- readOGR(".\\BC_data\\BC_Shapes\\BC_soils\\Soil_Polygons_SLC", layer = "EcoDistricts_BC")
xcheck <- subset(ed, select = c("ECODISTRIC","SHAPE_LENG","SHAPE_AREA"))
ed_all <- ed$ECODISTRIC
ed_null <- ed$EDNONE
shinyServer(function(input, output, session) {
x <- reactiveValues(input$ed_chkbx == TRUE)
ed_list<- reactiveValuesToList(x, all.names = FALSE)
previewInput <- reactive({
rsaga.geoprocessor("shapes_polygons",
"Polygon Intersection",
list(SHAPES_A=xcheck),
FIELD_A="ECODISTRIC",
SHAPES_B=ed_list(),
SHAPES_AB= ##THIS IS USUALLY THE DIRECTORY FOR THE OUTPUT OF THE INTERSECTED FILE##
METHOD=1)})
output$preview <- renderPlot(previewInput(),
width = "150px",
height = "150px",
res = 72,
env = parent.frame(),
quoted = FALSE,
func = NULL)
})