保存用户输入并在Rshiny会话的后续阶段访问它们

保存用户输入并在Rshiny会话的后续阶段访问它们,r,shiny,R,Shiny,我目前在Rshiny仪表板中有一个selectInputs列表,当组合在一起时会创建一个数据帧,用于以后非常复杂的操作。我目前需要扩展dashbaord,以允许多次提交用户输入。我们的目标是有一种方法,在这种方法中,作为数据帧提交的所有用户输入将能够在最后进行组合,然后进行操作。所有数据帧在列的名称/长度方面都具有相同的格式,但行数可能会更改。下面是数据帧思想的str图像 例如: 第一次提交是:df1)x,y,z是列名 1.提交后,将重置用户提交的选择输入 第二次提交是:df2:x,y,z是列

我目前在Rshiny仪表板中有一个selectInputs列表,当组合在一起时会创建一个数据帧,用于以后非常复杂的操作。我目前需要扩展dashbaord,以允许多次提交用户输入。我们的目标是有一种方法,在这种方法中,作为数据帧提交的所有用户输入将能够在最后进行组合,然后进行操作。所有数据帧在列的名称/长度方面都具有相同的格式,但行数可能会更改。下面是数据帧思想的str图像

例如: 第一次提交是:df1)x,y,z是列名

1.提交后,将重置用户提交的选择输入

第二次提交是:df2:x,y,z是列名

第三次提交是:df3:x,y,z是列名

我想访问(df1,df2,df3)的组合数据帧,它们都是彼此堆叠的。我想添加一个新列session,它在创建相关行时为该行保存会话


我相信rshiny的会话功能将是实现最终结果的关键。如果有任何其他问题已经回答了这一点,请帮助指导我那里

这是一个玩具程序,它使用
reactiveValues
实现您想要的功能。我对数据使用了可选字符ID,而不是固定的a、B、C:

library(shiny)
u <- shinyUI(fluidPage(
  titlePanel("Generate and accumulate data"),
  sidebarLayout(
    sidebarPanel(
      numericInput("newrow","Number of new rows",3),
      selectInput("newid","Data Frame id",toupper(letters),"A"),
      actionButton("gennew","Generate new data"),
      actionButton("append","Append new data to total"),
      actionButton("clear","Clear total data")
    ),
    mainPanel(
      h2("New data"),tableOutput("newdf"),
      h2("Total data"),tableOutput("totdf")
)))) 

zerodf <- data.frame(id=character(0),x=numeric(0),y=numeric(0),z=numeric(0))

s <- shinyServer(function(input, output) {

  rv <- reactiveValues(newdf=zerodf,totdf=zerodf)

  observeEvent(input$gennew,{
    n <- input$newrow
    id <- input$newid
    rv$newdf <- data.frame(id=id,x=rnorm(n),y=rnorm(n),z=rnorm(n))
  })
  observeEvent(input$append,{ rv$totdf <- rbind(rv$totdf,rv$newdf)})
  observeEvent(input$clear,{  rv$totdf <- zerodf })

  output$newdf<-renderTable({  rv$newdf })
  output$totdf<-renderTable({  rv$totdf })
})
shinyApp(u,s)
库(闪亮)

你有没有看过
?reactiveValues
?没有,但现在将深入研究?reactiveValue不是很好描述。闪亮的文档中对
reactiveValues
的描述确实很模糊。我想出了一个小例子,告诉你如何按你需要的方式使用它。经过几个小时的努力,混合和匹配其他工作,我得到了类似的结果。这是难以置信的帮助,比我过度设计的尝试要干净得多。谢谢:)熟能生巧:)。很高兴你自己先尝试了,这将使学习更深入。顺便说一句,你现在可以投票了:)。哈哈哈,我知道,我对此非常兴奋:)。感谢您对社区的支持!我希望将来能像你那样帮助别人。不断改进才是最重要的:)我相信你会的。