当用户点击GO按钮时,我想要修改一个被动对象。我尝试了这段代码,Per
给出了很好的结果。
考虑到第一个,我想做多个修改,所以每次修改它时我都应该保存RA_s
。
我该如何处理这个问题?
代码
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
)
答案 0 :(得分:1)
为了存储和更新被动对象,您可以使用reactiveVal或reactiveValues。
我创建了一个关于如何根据您的目标运作的简单示例:
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)
希望这有帮助!
答案 1 :(得分:1)
我使用reactiveValues而不是reactiveVal,它完美地运行
谢谢@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)