首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闪亮/ rscript -使用checkboxGroupInput整数列表的反应性绘图不起作用

闪亮/ rscript -使用checkboxGroupInput整数列表的反应性绘图不起作用
EN

Stack Overflow用户
提问于 2013-07-20 09:30:35
回答 1查看 3.4K关注 0票数 2

不幸的是,我遇到了使复选框值(那些是单个生态区)绘制复选框中每个所选生态区的轮廓的反应性预览所需的反应性功能的问题。

我有一个包含110个生态区(244、278、302等)的整数列表的checkboxGroupInput。以及用于反应式输出的outputPlot处理程序。

为了获得要点,读取形状文件以提取复选框组的生态区列表('ed_all'),并提取具有每个生态区轮廓的形状('xcheck')。在本质上,我试图完成两件事:

1-创建一个反应变量'ed_list‘,当使用复选框选择生态区时,该变量会更改整数列表

2-使用反应变量'ed_list‘和'xcheck’形状进行反应多边形相交,以便绘制所选生态区的反应图。

我目前正在使用rsaga.geoprocessor封装在一个响应式命令中来完成交叉点,但如果有更好的方法,我愿意接受建议。每次我尝试执行这段代码时,它都会给我...

“.getReactiveEnvironment()$currentContext()中出错:在没有活动反应上下文的情况下不允许操作。(您试图执行只能从反应函数内部完成的操作。)”

或者其他类似的东西。

以下是与我的问题相关的代码:

代码语言:javascript
复制
    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"))

               ))

这是代码的服务器部分。

代码语言:javascript
复制
    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)

    })
EN

回答 1

Stack Overflow用户

发布于 2013-07-21 12:34:20

错误消息表明您正在访问ShinyServer函数内的“反应式”元素,但在任何反应式函数之外。

当我尝试以类似的方式使用reactiveValues时,我也遇到了类似的错误。(我使用的是shiny 0.5)。我通过将reactive中的所有内容都封装在server.R中来绕过它们。

建议

尝试注释掉访问input$ed_chkbx的代码行

代码语言:javascript
复制
x <- reactiveValues(input$ed_chkbx == TRUE)
ed_list<- reactiveValuesToList(x, all.names = FALSE)

如果您将这两行移动到previewInput reactive函数中,getReactiveEnvironment错误应该会消失。

希望这对你有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17757765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档