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

Posted

技术标签:

【中文标题】闪亮/ rscript - 使用checkboxGroupInput整数列表的反应图不起作用【英文标题】:shiny / rscript - reactive plot using checkboxGroupInput integer list not working 【发布时间】:2013-07-19 10:16:49 【问题描述】:

我正在使用 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)

    )

【问题讨论】:

【参考方案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 错误应该会消失。

希望对你有用。

【讨论】:

以上是关于闪亮/ rscript - 使用checkboxGroupInput整数列表的反应图不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Rscript 有 Emacs 模式吗?

在Rscript中更改目录

Rscripts

R.exe、Rcmd.exe、Rscript.exe 和 Rterm.exe:有啥区别?

bash 到 Rscript 中的命令行参数

在 NodeJS 中运行 R 脚本时产生 Rscript ENOENT 错误