【问题标题】:Making an object available in Shiny outside renderPlot for renderTable使一个对象在 Shiny 外部 renderPlot 中为 renderTable 可用
【发布时间】:2020-11-02 11:08:44
【问题描述】:

我正在起草一个简单的 Shiny 应用程序,它提供对动态图表和相应表格的访问。 server.R 代码的相关部分如下所示:

output$some_plot<- renderPlot({
    # Subset data on change in the indicator selection
    chrt_demo_dta <- subset(x = dta_la_demo, 
                            subset = <<my-conditions>>>)
    # Define the demography chart
    ggplot(data = chrt_demo_dta, aes(x = variable_a, y = variable_b)) +
      geom_line(aes(colour = GEOGRAPHY_NAME), size = 2) +
      theme_bw()}, height = 650, width = 800)

  # Section generating table
  output$chrt_demo_dta_tbl <- renderTable({chrt_demo_dta})

当我尝试访问表时出现问题,我收到以下错误消息:

func() 中的错误:找不到对象 'chrt_demo_dta'

对象chrt_demo_dta 似乎是在renderTable 的范围规则之外创建的。我的问题是如何实现以下目标:

  1. 我希望图表和相应的表格在选择时动态更新,因此我的想法是在 renderPlot 中嵌入 subset 命令,这样可以工作
  2. 我想在对应表中使用相同的子集。理想情况下,我想避免重复子集命令。由于我已准备好所需的数据框,因此似乎只需通过renderTable 访问它即可

我知道代码不是完全可重现的,但在这个阶段我不一定要寻找特定的解决方案,而是更通用的指导是否可以访问在一个服务器元素中创建的对象来自其他服务器元素。如果推送到了,我可以将子集机制封装在一个函数中并调用它两次,但这似乎是一个相当混乱的解决方案。

【问题讨论】:

  • 您应该使 chrt_demo_dta 具有响应性,例如,在您的服务器主体中包含 chrt_demo_dta &lt;- reactive({subset(dta_la_demo...}),然后在 renderPlotrenderTable 中使用 chrt_demo_dta() 引用它
  • 如何将chrt_demo_dta 设为全局变量,使用双箭头

标签: r object scope shiny scoping


【解决方案1】:

server.Rserver函数中:

# Create reactive object w/in server func
chrt_demo_dta <- reactiveVal()

output$some_plot<- renderPlot({
  chrt_demo_dta.temp <- subset(
    x = dta_la_demo, 
      subset = <<my-conditions>>>)
  # Update the obj within scope of nested function
  chrt_demo_dta(chrt_demo_dta.temp)
})

# Access of the updated obj is now possible in original scope
output$chrt_demo_dta_tbl <- renderTable({chrt_demo_dta()})

查看相关:Shiny : How to modify reactive object

【讨论】:

    【解决方案2】:

    【讨论】:

    • IMO,@Matthew Plourde 在上面的评论中建议的解决方案是要走的路,而不是写入磁盘。
    猜你喜欢
    • 2013-03-08
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2021-08-04
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多