Как избежать дублирования кода в блестящих реактивных выражениях - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок в 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 в приведенном выше примере?

1 Ответ

0 голосов
/ 11 сентября 2018

Как я понимаю процесс получения 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)})

})
...