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

时间:2017-03-20 17:04:15

标签: r shiny

我目前在Rshiny仪表板中有一个selectInput列表,在组合时创建一个数据框,用于以后的非常复杂的操作。我目前需要扩展dashbaord以允许多次提交userInputs。目标是有一种方法,其中作为数据框提交的所有userInput都能够在最后被组合然后被操纵。所有数据帧在名称/列长度方面都具有相同的格式,但行数可能会发生变化。下面是数据框架思想的图像。

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

enter image description here  1.提交后,用户提交的selectInputs将被重置。

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

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

我想访问(df 1,df2,df3)的组合数据帧,它们全部堆叠在一起。我想添加一个新列session,它会在创建时为相关行保存会话#。

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

1 个答案:

答案 0 :(得分:1)

这是一个使用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)

它的实际屏幕截图:

enter image description here