Shiny : How to modify reactive object

纵然是瞬间 提交于 2020-05-06 18:46:08

问题


I have a reactive object that i want to modify when the user click on the GO button. I tried this code and Per gives a great result. Now I want to do more than one modification considering the first one, so It seems like I should save RA_s every time I modify it.

How can I handle with this problem ?

Code

shinyServer(function(input, output) {

  RA_s <- reactive({
    read.csv("C:/alay/Desktop/RA.csv")
  })

  Per <- reactive({
    if(input$go == 0) return(RA_s())
    else {
       c = RA_s()
       c[1] = rep(0,nrow(RA_s()))
    }
   c
  })

      })


sidebar <- dashboardSidebar(
  sidebarMenu(
    menuItem("Download", tabName = "d")
)
body<- dashboardBody(
  tabItems(
    tabItem(tabName = "d",
         actionButton("go",'GO!')     )
  )
dashboardPage(
dashboardHeader(title = "Valo"),
sidebar,
body
)

回答1:


In order to store and update reactive objects, you can use reactiveVal or reactiveValues.

I created a simple example on how this works with your goal in mind:

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

  RA_s <- reactiveVal()
  RA_s(1) # intiialize the reactiveVal, place your csv read here.


  # an observer to update the reactiveVal RA_s
  observeEvent(input$go, {
    # read the current value
   current_value <- RA_s()

   # update the value
   new_value <- current_value +1

   # write the new value to the reactive value
   RA_s(new_value)

   # print to console, just to check if it updated.
   print(paste0("Succesfully updated, new value: ",RA_s()))
  })

})


ui <- shinyUI(
  fluidPage(
    actionButton("go","GO!")     
  )
)
shinyApp(ui,server)

Hope this helps!




回答2:


I used reactiveValues instead of reactiveVal and it works perfectly

Thanks @Florian

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

   in_data <- reactive({
       inFile <- input$e
       read.csv(inFile$datapath)
    })

  RA_s <- reactiveValues(ra = NULL)
  RA_s$ra <- in_data() # intiialize the reactiveValue


  # an observer to update the reactiveValue RA_s
  observeEvent(input$go, {
    # read the current value
   current_value <- RA_s$ra

   # update the value
   new_value <- current_value[-(1)]

   # write the new value to the reactive value
   RA_s$ra <- new_value


  })
  output$x <- renderDataTable({
   RA_s$ra
  })
})


ui <- shinyUI(
  fluidPage(
    fileInput('e', 'E'),
    actionButton("go","GO!"),
    dataTableOutput('x')     
  )
)
shinyApp(ui,server)


来源:https://stackoverflow.com/questions/45285090/shiny-how-to-modify-reactive-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!