问题
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