Я хотел бы создать блестящее приложение, которое отображает реактивную таблицу. Я хотел бы иметь возможность одновременно исключать определенные строки и сохранять исключенные строки в файле .Rda на моем сервере. Смысл в том, чтобы навсегда исключить определенные строки, поэтому каждый раз, когда кто-то загружал блестящее приложение, строки уже будут исключены.
Я прошел 95% пути - мое блестящее приложение отображает таблицу и сохраняет исключенные строки в файле .Rda на моем сервере. Когда я перезапускаю приложение, правильные строки исключаются, однако я не могу заставить таблицу динамически исключать строки в том же сеансе, где я их исключаю. По сути, я хочу иметь возможность нажать кнопку действия и немедленно исключить строки.
Вот блестящее приложение
library(shiny)
library(tidyverse)
ui <- fluidPage(
mainPanel(
DT::dataTableOutput("flag"),
actionButton("exclude", "Exclude")
)
)
server <- function(input, output) {
df <- data.frame(id = 1:10, fu_score = 1:10,
stringsAsFactors = FALSE)
if (file.exists("data/prev_exclude.Rda")) {
load("data/prev_exclude.Rda")
} else {
prev_exclude <- data.frame(id = 0, fu_score = 0, stringsAsFactors = FALSE)
save(prev_exclude, file = "data/prev_exclude.Rda")
}
df_flag <- reactive({
df %>%
anti_join(., prev_exclude, by = c("id", "fu_score"))
})
output$flag <- DT::renderDataTable({
DT::datatable(df_flag(), options = list(paging = FALSE))
})
selected_prev <- eventReactive(input$flag_rows_selected, {
data.frame(id = df_flag()$id[c(input$flag_rows_selected)],
fu_score = df_flag()$fu_score[c(input$flag_rows_selected)])
})
observeEvent(input$exclude, {
prev_exclude <- isolate(bind_rows(selected_prev(), prev_exclude))
save(prev_exclude, file="data/prev_exclude.Rda")
load("data/prev_exclude.Rda")
})
}
# Run the application
shinyApp(ui = ui, server = server)
Опять же, я хотел бы иметь возможность: 1. исключать строки из отображаемой таблицы во время моего сеанса (т. Е. Нажать кнопку действия и удалить строки) и 2. сохранять исключенные строки для будущего исключения. Мой код обрабатывает второй кусок, однако он не исключает строки во время моего сеанса (только после перезагрузки).