rgdal と RSAGA アドオンを使用して、R スクリプトを使用して地理分析ソフトウェアを開発しています。私は最近、光沢のあるアドオンを見つけました。UI でループ コントローラーをラップするのがいかに簡単であるかに満足しています。残念ながら、チェックボックスで選択された各エコディストリクトのアウトラインのリアクティブプレビューをプロットする値のチェックボックスグループ(個々のエコディストリクト)を作成するために必要なリアクティブ機能に問題があります。
110 のエコディストリクト (244、278、302 など) の整数リストと、リアクティブ出力用の outputPlot ハンドラーを含むcheckboxGroupInput があります。
要点を取得するために、形状ファイルを読み取って、チェックボックス グループのエコディストリクトのリストを抽出し ('ed_all')、すべてのエコディストリクトのアウトラインを含む形状も抽出します ('xcheck')。本質的に、私は2つのことを達成しようとしています:
1 - Ecodistricts がチェックボックスで選択されると、整数のリストを変更するリアクティブ変数 '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)
})