我的应用程序有一些图表,我想用sperate脚本绘制它们,以便有一个更清晰的server.R
,然后只包含bind_shiny
个调用。
另外,因为我想回收我的图表的一些构建块,我想分割脚本以在较小的代码部分绘制图表。
要知道,我有一个像这样的 charts.R 文件:
chart1 <- reactive({
cars %>%
ggvis(~speed)
})
chart2 <- reactive({
chart1 %>% layer_bars()
})
当然不需要反应性,但它将在我的原始申请中。
然后,我想以这种方式在 server.R 上调用图表:
library(shiny)
library(ggvis)
source("charts.R")
shinyServer(function(input, output) {
chart2 %>%
bind_shiny("test1", "test1_ui")
})
ui.R
library(shiny)
library(ggvis)
shinyUI(fluidPage(
fluidRow(titlePanel("My app")),
fluidRow(
column(12,
tags$h1("hello"),
ggvisOutput('test1')
)
)
)
)
我注意到当我把所有东西放在一个对象中时,一切都在chart.R中有效,但是如果我拆分绘制多个部分的图表的功能则不行。但是,这样的工作
> a <- cars %>%
+ ggvis(~speed)
> a
Guessing layer_histograms()
Guessing width = 0.5 # range / 42
> a %>% layer_bars()
任何人都可以解释如何解决这个问题以及为什么我的两步法在R中起作用但在Shiny中不起作用?
答案 0 :(得分:0)
如果您的问题是您无法看到该情节,那是因为在您的第二个recative
声明中,您需要将chart1
称为chart1()
。换句话说,将charts.R
更改为
<强> Charts.R 强>
chart1 <- reactive({
cars %>%
ggvis(~speed)
})
chart2 <- reactive({
chart1() %>% layer_bars()
})
如果您想了解有关反应性的更多信息,请查看this链接。