【发布时间】:2016-07-07 16:02:38
【问题描述】:
我的应用程序有一些图表,我想在一个单独的脚本中绘制它们,以便让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')
)
)
)
)
当我将所有内容放在一个对象中时,我注意到一切都在charts.R 中有效,但如果我将绘制图表的函数拆分为多个部分,则它不会。但是,像这样的东西是可行的
> a <- cars %>%
+ ggvis(~speed)
> a
Guessing layer_histograms()
Guessing width = 0.5 # range / 42
> a %>% layer_bars()
任何人都可以解释如何解决这个问题,以及为什么我的两步法在 R 中有效,但在 Shiny 中无效?
【问题讨论】: