【发布时间】: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 的范围规则之外创建的。我的问题是如何实现以下目标:
- 我希望图表和相应的表格在选择时动态更新,因此我的想法是在
renderPlot中嵌入subset命令,这样可以工作 - 我想在对应表中使用相同的子集。理想情况下,我想避免重复子集命令。由于我已准备好所需的数据框,因此似乎只需通过
renderTable访问它即可
我知道代码不是完全可重现的,但在这个阶段我不一定要寻找特定的解决方案,而是更通用的指导是否可以访问在一个服务器元素中创建的对象来自其他服务器元素。如果推送到了,我可以将子集机制封装在一个函数中并调用它两次,但这似乎是一个相当混乱的解决方案。
【问题讨论】:
-
您应该使 chrt_demo_dta 具有响应性,例如,在您的服务器主体中包含
chrt_demo_dta <- reactive({subset(dta_la_demo...}),然后在renderPlot和renderTable中使用chrt_demo_dta()引用它 -
如何将
chrt_demo_dta设为全局变量,使用双箭头
标签: r object scope shiny scoping