繁体   English   中英

在Shiny中初始化和更新反应式(data.table)?

[英]Initializing and updating a reactive (data.table) in Shiny?

是否有可能使有光泽的反应性初始化? 我想要一个反应性的data.table。 此data.table的一部分不会更改,因此每次输入更改时都不需要重新初始化它,而仅需要更新列“ original_values”和“ working_values”。

这可能吗? 还是这样的情况 ,即使我在这里计算值并且没有副作用 ,也可以更好地将activeValues()与observe()结合使用

library(shiny)
library(data.table)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      sliderInput("slider1", "Slider 1",min = 0.1, max = 1, value = 0.4, step = 0.05),
      sliderInput("slider2", "Slider 2",min = 0.1, max = 1, value = 0.4, step = 0.05),                               
      sliderInput("slider3", "Slider 3",min = 100, max = 20000, value = 5000, step= 200)
    ), 
    mainPanel(
      tableOutput("tableOut")

    )

  ))

  server <- function(input, output, session){
    rv_dtWeights <- reactive({

      #initalization - can this be put somewhere else?
      ret <- data.table(slider_names= c("slider1","slider2", "slider3"), 
                        some_grouping_information=c("A", "A", "B") )

      #actual reactive
      ret[,original_values :=c(input$slider1,input$slider2,input$slider3)]
      ret[,working_values:=sum(original_values), by=some_grouping_information]

    })

    output$tableOut<- renderTable(rv_dtWeights())

  }
  shinyApp(ui = ui, server=server)

您可以将其放在reactive之外,也可以放在server (或放在server外部,有关差异的更多信息,请参见此处 )。 下面给出一个示例,其中当用户打开应用程序时, data.table仅初始化一次。

希望这可以帮助!

library(shiny)
library(data.table)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      sliderInput("slider1", "Slider 1",min = 0.1, max = 1, value = 0.4, step = 0.05),
      sliderInput("slider2", "Slider 2",min = 0.1, max = 1, value = 0.4, step = 0.05),                               
      sliderInput("slider3", "Slider 3",min = 100, max = 20000, value = 5000, step= 200)
    ), 
    mainPanel(
      tableOutput("tableOut")

    )

  ))

server <- function(input, output, session){

  #initalization - can this be put somewhere else?
  ret <- data.table(slider_names= c("slider1","slider2", "slider3"), 
                    some_grouping_information=c("A", "A", "B") )


  rv_dtWeights <- reactive({
    #actual reactive
    ret[,original_values :=c(input$slider1,input$slider2,input$slider3)]
    ret[,working_values:=sum(original_values), by=some_grouping_information]

  })

  output$tableOut<- renderTable(rv_dtWeights())

}
shinyApp(ui = ui, server=server)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM