如何在闪亮中嵌入来自外部源的 ggvis 图表?

How to embed a ggvis chart from an external source in shiny?

我已经在这里找到了几乎相同主题的答案 Dynamic ggvis object in Shiny,但我仍然堆放着一段类似的代码,我不太明白为什么。

ui.R

library(shiny)
library(ggvis)
shinyUI(fluidPage(

  fluidRow(titlePanel("My app")),

    fluidRow(
          column(3,
                 tags$h1('Menu'),
                 radioButtons('colors', label = 'select bars color',
                                    c("Red"='red','Green'='green','Blue'='blue'))
                 ),
          column(9,
                 tags$h1("hello"),
                 ggvisOutput('test1'),
                 tags$h2("Chosen color is",textOutput('testText', inline = T))
                 )
    )
   )
  )

server.R

library(shiny)
library(ggvis)
shinyServer(function(input, output) {
source("charts.R")
  output$testText <- reactive({ input$colors })
  input_color <- reactive({ input$colors })
  # cars %>%
  #   ggvis(~speed, fill:= input_color) %>%
  #   layer_bars() %>%
  #   bind_shiny("test1", "test1_ui")
  chart1() %>%
    bind_shiny("test1", "test1_ui")
})

charts.R

chart1 <- reactive({
  cars %>% 
    ggvis(~speed, fill:= input_color) %>% 
    layer_bars() 
})

我想将 chart1charts.R 调用到 server.R。如果我在 server.R 中使用注释代码,一切都适用于 ggvis,但当我尝试从 charts.R 中调用 ggvis 函数时它不起作用(如在未注释的代码中)。

此外,您认为创建多个 .R 脚本是一个好习惯还是我应该选择合适的模块?

您需要在脚本中编辑两处内容:

  1. 如果要将服务器或ui代码拆分成多个文件,可以使用source(local=TRUE)加载每个文件。您可以将此视为将代码放入内联,因此源文件中的代码将接收到与您将文本复制并粘贴到那里相同的范围。 (无耻地抄袭自here

  2. 反应对象只能在其他反应表达式或渲染*表达式中用括号调用

因此,您的 server.R 收件人应该如下所示:

library(shiny)
library(ggvis)

shinyServer(function(input, output) {

source("charts.R", local = T)

output$testText <- reactive({ input$colors })
input_color <- reactive({ input$colors })

chart1 %>%
bind_shiny("test1", "test1_ui")

})