r - 如何在 R Shiny 应用程序中存储反应变量的先前状态?
问题描述
让我们想象一个 Shiny 应用程序,当用户点击一个 ActionButton 时,它会生成一个包含 10 个随机单词的向量。这些词呈现在一个表格(DT 包)中,允许用户选择他感兴趣的词/行以构建选择。此选择被传输到另一个表(使用来自 DT 数据表的“_rows_selected”输入)并显示。这就是下面的最小示例所做的:
library(shiny)
library(DT)
ui <- fluidPage(
actionButton("generate", "New random words"),
h5("Original data"),
dataTableOutput("results"),
br(),
h5("Selected data"),
dataTableOutput("selection")
)
server <- function(input, output, session) {
generated_data <- eventReactive(input$generate, {
random_words <- sapply(1:10, function(x) sample(letters, x) %>% paste(collapse=""))
data.frame(ID=1:10, Word=random_words)
})
output$results <- renderDataTable(
datatable(generated_data(), rownames = FALSE)
)
output$selection <- renderDataTable(
generated_data()[input$results_rows_selected,] %>%
datatable(rownames=FALSE)
)
}
shinyApp(ui, server)
但是,如果用户再次单击操作按钮,则会生成新单词,因此会删除第二个表中的选择。我希望选择跟踪以前选择的单词并添加我们选择的任何新单词选择。
我怎样才能做到这一点?我怎样才能记住我的反应变量的先前状态(在通过新的点击生成新单词时冻结)并将它们连接到其当前选择的单词?
到目前为止我还没有找到解决方案,在此先感谢您的帮助!
解决方案
您可以将它们存储在反应值中,如下所示:
all_words <- reactiveVal(data.frame(ID = integer(0), Word = character(0)))
generated_data <- eventReactive(input$generate, {
random_words <-
sapply(1:10, function(x) sample(letters, x) %>% paste(collapse=""))
dat <- data.frame(ID=1:10, Word=random_words)
all_words(rbind(all_words(), dat))
dat
})
推荐阅读
- angular - Angular 中的监听器事件
- flutter - 两个不同的块导致“坏状态:流已经被收听”。
- java - Java中UTF-8编码中2GB txt文件中每个单词的词频
- windows - nuget install 如何决定何时下载新版本的软件包?
- javascript - 正则表达式在记事本++中查找并替换每n次出现
- swift - Swift:隐式解包的变量可以工作,但不会强制将其强制转换为相同的类型。为什么?
- javascript - 从可选数组返回字符串数组
- android - 如何在 android studio 中通过编码使用不同的语言?
- excel - 无法通过 excel 2016 VBA 在 word 中编辑自定义字段
- html - Bootstrap 自定义下载 网格系统上缺少样式