【问题标题】:Adding reactive values to a dataframe - Rshiny向数据框添加反应值 - R Shiny
【发布时间】:2020-02-12 02:42:48
【问题描述】:

目前我正在尝试以下操作:在 Rshiny 中导入一个文件,给它一个数字(交互式),然后继续下一个文件。这部分工作正常。但是,我还想存储每次迭代的数据,然后将其显示在用户界面上。 但是,它不起作用。所以我猜反应性有些不对劲,但我不知道如何解决它。

ui<-fluidPage(
    mainPanel(
        radioButtons(inputId="score",label="Give a score",choices=c(1:9),selected=1),
        actionButton(inputId="new","Next file"),
        tableOutput("savdat")
        )
    )
server<-function(input,output){

NoFiles<-length(list.files())

这里是一个空的响应式 data.frame

outputdata<-reactive(data.frame("file"="file","score"="score"))

filename<-eventReactive(input$new,{ 
            WhichFile<-sample(1:NoFiles,1)
            filename<-list.files()[WhichFile]
            return(filename)
 })

scores<-eventReactive(input$new,{
            return(input$score)
            })

然后我想用新值附加输出数据的先前值。但它不起作用

outputdata<-eventReactive(input$new,{
            rbind(outputdata(),filename(),scores())
            })

output$savdat<-renderTable(outputdata())
}

shinyApp(ui, server)

欢迎任何建议

【问题讨论】:

    标签: r dataframe shiny reactive-programming


    【解决方案1】:

    您似乎希望每次单击“下一个文件”按钮时都发生反应。每次单击“下一个文件”按钮时,我都会使用“ObserveEvent”重写您的代码以仅响应一次。第二个挑战是允许值在每个反应事件上持续存在。虽然有多种方法可以处理这个问题,但我选择了一种权宜之计,即“

    这是我使用您创建的相同 ui 进行的重写:

    ui<-fluidPage(
      mainPanel(
        radioButtons(inputId="score",label="Give a score",choices=c(1:9),selected=1),
        actionButton(inputId="new","Next file"),
        tableOutput("savdat")
      )
    )
    server<-function(input,output){
    
      NoFiles<-length(list.files())
    
      setupData <- function(filename,score) {
        data <- data.frame(filename,score,stringsAsFactors = FALSE)
        return(data)
      }
    
      observeEvent (input$new, {
        WhichFile<-sample(1:NoFiles,1)
        filename<-list.files()[WhichFile]
    
        if (!exists(c('outputdata'))) {
          score <- input$score
          outputdata <<- data.frame (filename,score,stringsAsFactors = FALSE)
        }
        else { 
          outputdata <<- rbind(outputdata,setupData(filename,input$score))
        }
    
        # Show the table
        output$savdat<-renderTable(outputdata)
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 非常感谢。那行得通。我不知道
    猜你喜欢
    • 2017-01-17
    • 2021-01-23
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2019-05-15
    • 2014-06-16
    相关资源
    最近更新 更多