R类中的反应场

R类中的反应场,r,model-view-controller,shiny,reactive,R,Model View Controller,Shiny,Reactive,是否可以在类中创建一个反应性字段,或者在应用程序的字段更改时通知应用程序的类 我得到了这门课,这是我的shinyApp的一个模型: CatalogModele <- setRefClass("CatalogModele", fields = list(catalogs = "list"), methods = list( initialize = function(catalogs_args = list()) { catalogs <<- cata

是否可以在类中创建一个反应性字段,或者在应用程序的字段更改时通知应用程序的类

我得到了这门课,这是我的shinyApp的一个模型:

CatalogModele <- setRefClass("CatalogModele",
  fields = list(catalogs = "list"),
  methods = list(
    initialize = function(catalogs_args = list()) {
      catalogs <<- catalogs_args
    },
    add_catalog = function(key, value) {
      catalogs[[key]] <<- value 
    }
  )
)

感谢阅读。

我使用
R6
类也有类似的用途。也许看看这一点可以帮助您为参考类开发类似的设计

library(R6)
library(shiny)

myClass <- R6Class(
  public = list(
    catalogs = reactiveValues(),
    add_catalog = function(key,value){
      self$catalogs[[key]] <- value
    }
  )
)

A = myClass$new()

shinyApp(
  fluidPage(
    inputPanel(
      textInput('key', 'key'),
      textInput('value', 'value'),
      actionButton('go', 'add')
    ),
    verbatimTextOutput('textOut')
  ),
  function(input, output, session){
    observeEvent(input$go,
      { A$add_catalog(input$key, input$value) }
    )
    output$textOut <- renderPrint({
      reactiveValuesToList(A$catalogs)
    })
  }
)
在这两种情况下,建议只让类的某些部分成为被动的。否则,您可能会在应用程序中遇到非常差的性能

observeEvent(catalogModele(), {
    str(catalogModele()$catalogs)
})
library(R6)
library(shiny)

myClass <- R6Class(
  public = list(
    catalogs = reactiveValues(),
    add_catalog = function(key,value){
      self$catalogs[[key]] <- value
    }
  )
)

A = myClass$new()

shinyApp(
  fluidPage(
    inputPanel(
      textInput('key', 'key'),
      textInput('value', 'value'),
      actionButton('go', 'add')
    ),
    verbatimTextOutput('textOut')
  ),
  function(input, output, session){
    observeEvent(input$go,
      { A$add_catalog(input$key, input$value) }
    )
    output$textOut <- renderPrint({
      reactiveValuesToList(A$catalogs)
    })
  }
)
CatalogModele <- setRefClass(
  "CatalogModele",
  fields = list(catalogs = "list"),
  methods = list(
    initialize = function(catalogs_args = list()) {
      catalogs <<- list(reactives = reactiveValues())
    },
    add_catalog = function(key, value) {
      catalogs$reactives[[key]] <<- value 
    },
    get_catalogs = function()
      reactiveValuesToList(catalogs$reactives)
  )
)

B = CatalogModele()

shinyApp(
  fluidPage(
    inputPanel(
      textInput('key', 'key'),
      textInput('value', 'value'),
      actionButton('go', 'add')
    ),
    verbatimTextOutput('textOut')
  ),
  function(input, output, session){
    observeEvent(input$go,
                 { B$add_catalog(input$key, input$value) }
    )
    output$textOut <- renderPrint(B$get_catalogs())
  }
)