我正在尝试分解我的闪亮应用程序的代码,以提高可读性并使用testthat
包测试某些功能。
我想要一些文件(例如server_utils.R
),我可以写一些文件" normal"我可以测试的功能,然后让它们反应。
例如,我希望server_utils.R
中有类似的内容:
my_sum <- function(x, y) {
x + y
}
在app中有类似的内容:
my_sum_reactive(input$x, input$y)
你知道这种行为是否可能吗?
答案 0 :(得分:2)
闪亮的模块可以帮到你。
见这里:https://shiny.rstudio.com/articles/modules.html
正如您可以在文章中看到的那样,如果您将输入包装在reactive()
函数中,则可以传入所需的传入输入功能。 (参见&#34;编写服务器功能&#34;文章的结尾部分。)
您可以按如下方式定义my_sum
函数:
(请注意,您必须使用变量a
和b
作为被动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)