【问题标题】:Shiny R, always-refreshing the code after inputShiny R,输入后始终刷新代码
【发布时间】:2016-05-09 04:36:19
【问题描述】:

我会问。 Shiny 是否喜欢在输入后始终刷新代码? 首先我在 ui 中编码:

 box( ##title="Quality Attributes",
               selectInput("att_ViewChart", width = '100%',label="Quality Attributes",
                          ##multiple = TRUE, 
                           choices=list(
                             "-",
                             "Suitability",
                             "Security",

                           )
               )
          ),
 dataTableOutput("tabelstatus")

然后我在服务器中编码:

 server = function(input, output) {
 withProgress(message = "AAAAA",{
      DateStatus_Sui<-c(1,2,3,4,NA,5,6,NA,7)
      TimeStatus_Sui<-c(11,22,33,44,NA,55,66,NA,88)
      status_Sui<-c(11,22,44,55,66,77,88)
      jumlah<-7
    })
  if(input$att_ViewChart=="Suitability"){
        Date<-DateStatus_Sui[!is.na(DateStatus_Sui)]
        Time<-TimeStatus_Sui[!is.na(TimeStatus_Sui)]
        Status<-status_Sui
        Observation<-1:jumlah
        #output

        tabelstatus<-data.frame(Observation,Date,Time,Status)
        output$tabelstatus<-renderDataTable(tabelstatus)
}

我希望当我运行应用程序时。 Shiny 将处理代码(由进度条'AAAAA' 显示)然后,如果我选择 Suitability,它会进行更多处理,然后显示表格。但是我发现进度条又出现了。在我看来,它从头开始重新运行代码。如何解决这个问题?谢谢

【问题讨论】:

  • 你能把你的server.R 全部发上来吗?或者至少做一个完整的可重现的例子?
  • @Symbolix 它是可重现的代码。真正的要复杂得多。不工作吗?
  • "reproducible" 意味着我可以简单地将您的代码复制并粘贴到我的 R 环境中,它就可以工作。我不能用你的代码做到这一点。如果没有看到您的全部server.R,就很难诊断出您的问题。我猜你在reactive() 表达式中没有你的if(input$att_ViewChart...)。要么,要么你需要isolate( ) if(input$...) 条件。
  • @symbolix。它可以重现吗?我只是添加服务器
  • 您可以自行检查它是否可重现(不是):启动一个新的 R 会话,仅使用您在上面提供的内容创建新文件,然后尝试运行闪亮的应用程序。如果您还没有,我建议您同时阅读 mcve 和 reproducible examples。

标签: r input shiny reactive-programming


【解决方案1】:

在没有完全可重现的例子的情况下,我猜这就是你想要做的(即根据你的input$att_ViewChart 制作表格reactive):

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
    dashboardHeader(),
    dashboardSidebar(),
    dashboardBody(
        box( selectInput("att_ViewChart", width = '100%',label="Quality Attributes",
                                    choices=c("-","Suitability","Security"))),
        dataTableOutput("tablestatus")
    )
)

server = function(input, output) {

    withProgress(message = "AAAAA",{
        DateStatus_Sui<-c(1,2,3,4,NA,5,6,NA,7)
        TimeStatus_Sui<-c(11,22,33,44,NA,55,66,NA,88)
        status_Sui<-c(11,22,44,55,66,77,88)
        jumlah<-7
    })

    ## make your table reactive on `input$att_ViewChart`
    output$tablestatus <- renderDataTable({

        if(input$att_ViewChart=="Suitability"){

            Date<-DateStatus_Sui[!is.na(DateStatus_Sui)]
            Time<-TimeStatus_Sui[!is.na(TimeStatus_Sui)]
            Status<-status_Sui
            Observation<-1:jumlah

            tablestatus <- data.frame(Observation,Date,Time,Status)
        }else{
            tablestatus <-data.frame()
        }
        return(tablestatus)
    })
}

shinyApp(ui = ui, server = server)

【讨论】:

  • 是的。但是当我选择 'Suitability' 时,进度条再次出现,就像从头开始做所有代码一样
  • @Elbert 进度条没有重新加载 - 你确定你复制了我的代码吗?
  • 我把它复制到真实的。进度条重新加载。我把它放在一个新文件中。它没有。到时我会检查其他部分。顺便说一句,如果在这些代码之前有上传文件,它会影响什么吗?
  • @Elbert - 很难说 - 这取决于你把上传文件功能放在哪里,你怎么称呼它,等等。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2019-03-24
  • 2016-11-09
  • 2022-06-22
  • 1970-01-01
  • 2018-07-15
  • 2016-09-06
  • 2021-05-26
相关资源
最近更新 更多