我正在構建一個閃亮的應用程式,我希望用戶能夠通過按下按鈕寫下對資料框的更改,并且我希望這些更改被存盤并在資料框中可用。例如:
library("shiny")
data <- as.data.frame(diamonds)
data$comment <- NA
toChange <- data
ui <- fluidPage(
selectInput(inputId = "cut",
label = "Select Cut",
choices = unique(diamonds$cut),
selected = "Ideal"),
actionButton(inputId = "price",
label = "Write new price"),
DTOutput("tabOut")
)
server <- function(input,session, output) {
observeEvent(input$price, {
toChange[toChange$cut == input$cut, "price"] <- toChange[toChange$cut == input$cut, "price"] * 3
toChange[toChange$cut == input$cut, "comment"] <- paste0("updated: ", Sys.time())
output$tabOut <- renderDT({
toChange
}, filter = "top")
})
observeEvent(req(input$price == 0), {
output$tabOut <- renderDT({
data
}, filter = "top")
})
observeEvent(input$price, {
})
}
shinyApp(ui = ui, server = server)
在這種情況下,當我運行應用程式并按下“寫入新價格”按鈕時,我只會將它用于“剪切”選擇器中最后選擇的選項。但我希望它保留之前選擇的值。
uj5u.com熱心網友回復:
我們可以存盤更改的資料集,reactiveValues并在用戶每次單擊按鈕時對其進行更新。
library("shiny")
library(DT)
data <- as.data.frame(ggplot2::diamonds)
data$comment <- NA
ui <- fluidPage(
selectInput(inputId = "cut",
label = "Select Cut",
choices = unique(ggplot2::diamonds$cut),
selected = "Ideal"),
actionButton(inputId = "price",
label = "Write new price"),
DTOutput("tabOut")
)
server <- function(input,session, output) {
toChange <- reactiveValues(df = data)
observeEvent(input$price, {
toChange$df[toChange$df$cut == input$cut, "price"] <- toChange$df[toChange$df$cut == input$cut, "price"] * 3
toChange$df[toChange$df$cut == input$cut, "comment"] <- paste0("updated: ", Sys.time())
output$tabOut <- renderDT({
toChange$df
}, filter = "top")
})
observeEvent(req(input$price == 0), {
output$tabOut <- renderDT({
data
}, filter = "top")
})
}
shinyApp(ui = ui, server = server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527263.html
標籤:r闪亮的闪亮反应
上一篇:直方圖的R改進
