访问 reactiveValuesToList 中的 reactiveValues
accessing reactiveValues in a reactiveValuesToList
我不想指定单独的 fileInput
变量,而是想使用 reactiveValues
来存储上传的 CSV 数据帧,以某种方式对其进行操作,然后存储它们以备后用。我的设计是通过文件名命名每个数据帧并附加到 reactiveValue rvTL
。我的问题是,
- 如何访问我使用
reactiveValuesToList(rvTL)
创建的列表下的各个数据框?
- 下一步,如何创建
selectInput
菜单以访问 fileInput
上传的各个数据帧
为了学习这个概念,我借鉴了 Dean Attali 的回答,并使 rvTL
与他的 values
变量相同。
我在 reactiveValues
上查看了很多示例代码,但仍然没有完全理解。大多数示例都在 reactiveValuesToList(input)
R Shiny: Keep/retain values of reactive inputs after modifying selection 上使用某种变体,我真的没有看到这里的逻辑。任何 help/suggestions 将不胜感激!
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)
})
))
真的如你所想的那么简单。你也很接近,只是陷入了一些语法陷阱。我做了以下更改:
- 那个
c(isolate(..
电话把事情搞砸了,我摆脱了它。它导致了那些 "Warning: Error in as.data.frame.default: cannot coerce class "c("ReactiveValues", "R6")" to a data.frame"
错误。
- 此外,您过于频繁地重复使用
rvTL
名称,这令人困惑并可能导致冲突,因此我重命名了其中几个。
- 我还添加了一个加载文件名列表 (
lfnamelist
) 以跟踪加载的内容。我本可以为此使用 names(rvTL$dflist)
但当时我没有想到 - 而且我也是一个有用的示例,说明如何将相关的反应值组织到一个声明中。
- 然后我添加了 rendered
selectInput
以便您可以检查 reactiveValue 列表中保存的内容。
所以这里是调整后的代码:
library(shiny)
runApp(shinyApp(
ui=(fluidPage(
titlePanel("amend data frame"),
mainPanel(
fileInput("file", "Upload file", multiple=T),
tabsetPanel(type="tabs",
tabPanel("rvTL tab",
numericInput("Delete", "Delete row:", 1, step = 1),
uiOutput("filesloaded"),
actionButton("Go", "Delete!"),
verbatimTextOutput("df_data_files"),
verbatimTextOutput("values"),
verbatimTextOutput("rvTL_names"),
tableOutput("rvTL_out")
),
tabPanel("values tab",
tableOutput("df_data_out")
)
)))),
server = (function(input, output) {
values <- reactiveValues(df_data = NULL) ##reactiveValues
rvTL <- reactiveValues(dflist=NULL,lfnamelist=NULL)
observeEvent(input$file, {
req(input$file)
values$df_data <- read.csv(input$file$datapath)
rvTL$dflist[[input$file$name]] <-read.csv(input$file$datapath)
rvTL$lfnamelist <- c( rvTL$lfnamelist, input$file$name )
})
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_names <- renderPrint(names(rvTL$dflist))
output$rvTL_out <- renderTable(rvTL$dflist[[input$lftoshow]])
output$df_data_out <- renderTable(values$df_data)
output$filesloaded <- renderUI(selectInput("lftoshow","File to show",choices=rvTL$lfnamelist))
})
))
这是一个屏幕截图:
我不想指定单独的 fileInput
变量,而是想使用 reactiveValues
来存储上传的 CSV 数据帧,以某种方式对其进行操作,然后存储它们以备后用。我的设计是通过文件名命名每个数据帧并附加到 reactiveValue rvTL
。我的问题是,
- 如何访问我使用
reactiveValuesToList(rvTL)
创建的列表下的各个数据框? - 下一步,如何创建
selectInput
菜单以访问fileInput
上传的各个数据帧
为了学习这个概念,我借鉴了 Dean Attali 的回答,并使 rvTL
与他的 values
变量相同。
我在 reactiveValues
上查看了很多示例代码,但仍然没有完全理解。大多数示例都在 reactiveValuesToList(input)
R Shiny: Keep/retain values of reactive inputs after modifying selection 上使用某种变体,我真的没有看到这里的逻辑。任何 help/suggestions 将不胜感激!
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)
})
))
真的如你所想的那么简单。你也很接近,只是陷入了一些语法陷阱。我做了以下更改:
- 那个
c(isolate(..
电话把事情搞砸了,我摆脱了它。它导致了那些"Warning: Error in as.data.frame.default: cannot coerce class "c("ReactiveValues", "R6")" to a data.frame"
错误。 - 此外,您过于频繁地重复使用
rvTL
名称,这令人困惑并可能导致冲突,因此我重命名了其中几个。 - 我还添加了一个加载文件名列表 (
lfnamelist
) 以跟踪加载的内容。我本可以为此使用names(rvTL$dflist)
但当时我没有想到 - 而且我也是一个有用的示例,说明如何将相关的反应值组织到一个声明中。 - 然后我添加了 rendered
selectInput
以便您可以检查 reactiveValue 列表中保存的内容。
所以这里是调整后的代码:
library(shiny)
runApp(shinyApp(
ui=(fluidPage(
titlePanel("amend data frame"),
mainPanel(
fileInput("file", "Upload file", multiple=T),
tabsetPanel(type="tabs",
tabPanel("rvTL tab",
numericInput("Delete", "Delete row:", 1, step = 1),
uiOutput("filesloaded"),
actionButton("Go", "Delete!"),
verbatimTextOutput("df_data_files"),
verbatimTextOutput("values"),
verbatimTextOutput("rvTL_names"),
tableOutput("rvTL_out")
),
tabPanel("values tab",
tableOutput("df_data_out")
)
)))),
server = (function(input, output) {
values <- reactiveValues(df_data = NULL) ##reactiveValues
rvTL <- reactiveValues(dflist=NULL,lfnamelist=NULL)
observeEvent(input$file, {
req(input$file)
values$df_data <- read.csv(input$file$datapath)
rvTL$dflist[[input$file$name]] <-read.csv(input$file$datapath)
rvTL$lfnamelist <- c( rvTL$lfnamelist, input$file$name )
})
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_names <- renderPrint(names(rvTL$dflist))
output$rvTL_out <- renderTable(rvTL$dflist[[input$lftoshow]])
output$df_data_out <- renderTable(values$df_data)
output$filesloaded <- renderUI(selectInput("lftoshow","File to show",choices=rvTL$lfnamelist))
})
))
这是一个屏幕截图: