避免 Shiny Reactive Expressions 中的代码重复
Avoiding code duplication in Shiny Reactive Expressions
我是 Shiny 的新手,所以如果这个问题被误导了,请原谅我。
假设我有 2 个独立的输入 input$n_1
和 input$n_2
调用几乎相同的代码。
library(shiny)
ui <- fluidPage(
fluidRow(
numericInput("n_1", label = "n1", value = 5000),
numericInput("n_2", label = "n2", value = 5000),
textOutput("result1"),
textOutput("result2")
)
)
server <- function(input,output,session)({
generate_result1 <- reactive({
# A whole lot of code to generate a result using input$n_1
x = input$n_1 * 5
})
generate_result2 <- reactive({
# A whole lot of identical code to generate a result using but using input$n_2.
# This example only shows one line of code but the real code has dozens of
# lines of code where the only difference from generate_result1 is that it uses
# input$n_2 instead of input$n_1.
x = input$n_2 * 5
})
output$result1 <- renderText(generate_result1())
output$result2 <- renderText(generate_result2())
})
shinyApp(ui = ui, server = server)
有没有办法避免目前在上述示例中 generate_result1
和 generate_result2
中发现的代码重复?
据我了解获得generate_result1
和generate_result2
的过程非常相似。唯一的区别是 它们接收不同的输入。
在这种情况下,您应该编写一个函数并将输入传递给它
generate_result<- function(input){
# bla bla bla
reactive( final_result)
}
然后根据不同的输入调用它,如下:
server <- function(input,output,session)({
output$result1 <- renderText({generate_result(input$n_1)})
output$result2 <- renderText({generate_result(input$n_2)})
})
我是 Shiny 的新手,所以如果这个问题被误导了,请原谅我。
假设我有 2 个独立的输入 input$n_1
和 input$n_2
调用几乎相同的代码。
library(shiny)
ui <- fluidPage(
fluidRow(
numericInput("n_1", label = "n1", value = 5000),
numericInput("n_2", label = "n2", value = 5000),
textOutput("result1"),
textOutput("result2")
)
)
server <- function(input,output,session)({
generate_result1 <- reactive({
# A whole lot of code to generate a result using input$n_1
x = input$n_1 * 5
})
generate_result2 <- reactive({
# A whole lot of identical code to generate a result using but using input$n_2.
# This example only shows one line of code but the real code has dozens of
# lines of code where the only difference from generate_result1 is that it uses
# input$n_2 instead of input$n_1.
x = input$n_2 * 5
})
output$result1 <- renderText(generate_result1())
output$result2 <- renderText(generate_result2())
})
shinyApp(ui = ui, server = server)
有没有办法避免目前在上述示例中 generate_result1
和 generate_result2
中发现的代码重复?
据我了解获得generate_result1
和generate_result2
的过程非常相似。唯一的区别是 它们接收不同的输入。
在这种情况下,您应该编写一个函数并将输入传递给它
generate_result<- function(input){
# bla bla bla
reactive( final_result)
}
然后根据不同的输入调用它,如下:
server <- function(input,output,session)({
output$result1 <- renderText({generate_result(input$n_1)})
output$result2 <- renderText({generate_result(input$n_2)})
})