在闪亮的应用程序外创建一个反应函数

时间:2017-05-15 09:41:16

标签: r module shiny

我正在尝试分解我的闪亮应用程序的代码,以提高可读性并使用testthat包测试某些功能。

我想要一些文件(例如server_utils.R),我可以写一些文件" normal"我可以测试的功能,然后让它们反应。

例如,我希望server_utils.R中有类似的内容:

my_sum <- function(x, y) {
  x + y
}

在app中有类似的内容:

my_sum_reactive(input$x, input$y)

你知道这种行为是否可能吗?

1 个答案:

答案 0 :(得分:2)

闪亮的模块可以帮到你。

见这里:https://shiny.rstudio.com/articles/modules.html

正如您可以在文章中看到的那样,如果您将输入包装在reactive()函数中,则可以传入所需的传入输入功能。 (参见&#34;编写服务器功能&#34;文章的结尾部分。)

您可以按如下方式定义my_sum函数: (请注意,您必须使用变量ab作为被动a()b()并将结果包装在reactive()函数中。)

my_sum <- function(input, output, session, a, b) {
  reactive(as.numeric(a()) + as.numeric(b()))
}

可以用它作为:

my_sum_reactive <- callModule(my_sum, "id", reactive(input$a), reactive(input$b))

然后可用作:

my_sum_reactive()

一个小例子:

library(shiny)

my_sum <- function(input, output, session, a, b) {
  reactive(as.numeric(a()) + as.numeric(b()))
}

ui <- fluidPage({
  fluidRow(
    selectInput("a", "a", 1:3),
    selectInput("b", "b", 1:3),
    textOutput("txt")
  )
})

server <- function(input, output, session) {
  my_sum_reactive <- callModule(my_sum, "id", reactive(input$a), reactive(input$b))
  output$txt <- renderText(paste0("The sum is: ", my_sum_reactive())) 
}
shinyApp(ui, server)