Этот вопрос связан с этим. Эти два могут генерировать те же функции, но реализация немного отличается. Одно существенное отличие состоит в том, что reactiveValue
представляет собой контейнер, который может иметь несколько значений, например input$
. В блестящая документация функциональность обычно реализуется с помощью reactive()
, но в большинстве случаев я нахожу reactiveValues()
более удобным. Есть ли здесь улов? Существуют ли какие-либо другие существенные различия между этими двумя, о которых я, возможно, не знаю? Являются ли эти два фрагмента кода эквивалентными?
См. тот же примерный код, реализованный с помощью:
-
реактивное выражение:
library(shiny) ui <- fluidPage( shiny::numericInput(inputId = 'n',label = 'n',value = 2), shiny::textOutput('nthValue'), shiny::textOutput('nthValueInv') ) fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2)) server<-shinyServer(function(input, output, session) { currentFib <- reactive({ fib(as.numeric(input$n)) }) output$nthValue <- renderText({ currentFib() }) output$nthValueInv <- renderText({ 1 / currentFib() }) }) shinyApp(ui = ui, server = server)
-
реактивное значение:
library(shiny) ui <- fluidPage( shiny::numericInput(inputId = 'n',label = 'n',value = 2), shiny::textOutput('nthValue'), shiny::textOutput('nthValueInv') ) fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2)) server<-shinyServer(function(input, output, session) { myReactives <- reactiveValues() observe( myReactives$currentFib <- fib(as.numeric(input$n)) ) output$nthValue <- renderText({ myReactives$currentFib }) output$nthValueInv <- renderText({ 1 / myReactives$currentFib }) }) shinyApp(ui = ui, server = server)