shiny / rscript - реактивный график с использованием целочисленного списка checkboxGroupInput не работает

Я разрабатываю геоаналитическое программное обеспечение с R-скриптом с использованием rgdal и надстройки RSAGA. Я недавно нашел блестящий аддон, и я доволен тем, насколько легко можно обернуть мой контроллер цикла в пользовательский интерфейс. К сожалению, у меня возникают проблемы с необходимыми реактивными функциями, чтобы сделать группу значений флажка (которые являются отдельными экодистриками) отображать реактивный предварительный просмотр контура каждого выбранного экодрайона в поле флажка.

У меня есть checkboxGroupInput с целочисленным списком из 110 экодистриков (244, 278, 302 и т. Д.) И обработчик outputPlot для реактивного вывода.

Чтобы понять суть, файл формы читается для извлечения списка экодистриков для группы флажков ('ed_all'), а также извлекается фигура с контуром каждого экодрайона ('xcheck'). По сути, я пытаюсь достичь двух вещей:

1 - создать реактивную переменную ed_list, которая изменяет список целых чисел, когда Ecodistricts выбираются с помощью флажков

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)

    })

person Jeramy    schedule 20.07.2013    source источник


Ответы (1)


В сообщении об ошибке говорится, что вы обращаетесь к «реактивному» элементу внутри функции ShinyServer, но за пределами любой из реактивных функций.

У меня возникали похожие ошибки, когда я пытался использовать reactiveValues аналогичным образом. (Я использую глянцевую 0,5). Я обошел их, обернув все реактивы в server.R.

Предположение

Попробуйте закомментировать строку, которая обращается к input$ed_chkbx

x <- reactiveValues(input$ed_chkbx == TRUE)
ed_list<- reactiveValuesToList(x, all.names = FALSE)

Если вы переместите эти 2 строки внутри реактивной функции previewInput, ошибка getReactiveEnvironment должна исчезнуть.

Надеюсь, это сработает для вас.

person Ram Narasimhan    schedule 21.07.2013