而不是单独指定fileInput
变量,我想使用reactiveValues
存储上传的 CSV 数据帧,以某种方式操作它们,然后存储它们以供以后访问。我的设计是通过文件名命名每个数据帧并附加到reactiveValuervTL
。我的问题是,
- 如何访问我使用创建的列表下的各个数据框
reactiveValuesToList(rvTL)
?
- 下一步,如何创建
selectInput
菜单来访问上传的各个数据帧fileInput
为了学习这个概念,我借鉴了 Dean Attali 的答案并做了rvTL
和他的一样values
多变的。R闪亮:如何在每次按下actionButton时更新反应数据框而不创建新的反应数据框? https://stackoverflow.com/questions/29716868/r-shiny-how-to-get-an-reactive-data-frame-updated-each-time-pressing-an-actionb
我已经看过很多示例代码reactiveValues
,但仍处于不完全的理解。大多数示例都使用某种排序变体reactiveValuesToList(input)
R Shiny:修改选择后保留无功输入值 https://stackoverflow.com/questions/38113507/r-shiny-keep-retain-values-of-reactive-inputs-after-modifying-selection/41840285#41840285,我真的看不出这里的逻辑。任何帮助/建议将不胜感激!
library(shiny)
runApp(shinyApp(
ui=(fluidPage(
titlePanel("amend data frame"),
mainPanel(
fileInput("file", "Upload file", multiple=T),
tabsetPanel(type="tabs",
tabPanel("tab1",
numericInput("Delete", "Delete row:", 1, step = 1),
actionButton("Go", "Delete!"),
verbatimTextOutput("df_data_files"),
verbatimTextOutput("values"),
verbatimTextOutput("rvTL"),
tableOutput("rvTL_out")
),
tabPanel("tab2",
tableOutput("df_data_out")
)
)))),
server = (function(input, output) {
values <- reactiveValues(df_data = NULL) ##reactiveValues
rvTL <- reactiveValues(rvTL = NULL)
observeEvent(input$file, {
values$df_data <- read.csv(input$file$datapath)
rvTL[[input$file$name]] <- c(isolate(rvTL), read.csv(input$file$datapath))
})
observeEvent(input$Go, {
temp <- values$df_data[-input$Delete, ]
values$df_data <- temp
})
output$df_data_files <- renderPrint(input$file$name)
output$values <- renderPrint(names(values))
output$rvTL <- renderPrint(names(reactiveValuesToList(rvTL))[1] )
output$rvTL_out <- renderTable(reactiveValuesToList(rvTL)[[1]])
output$df_data_out <- renderTable(values$df_data)
})
))