Shiny htmlOutput中的for循环不按顺序

时间:2016-11-11 18:00:36

标签: javascript r shiny

在Shiny htmlOutput中使用循环这是一个非常奇怪的行为。我一直在尝试做的非常简单,从Shiny htmlOuput执行Javascript代码(console.log)并将循环编号打印到控制台。请参阅以下代码:

library(shiny)
ui <- fluidPage(
  actionButton("goButton", "Go!"),
  mainPanel(htmlOutput("result"))
)
server<-  function(input, output) {
  observeEvent(input$goButton,{
    output$result <- renderUI({
      html_output_list <- lapply(1:50, function(j) {
        htmlname <- paste("html", j, sep="")
        htmlOutput(htmlname)
      })
      # Convert the list to a tagList - this is necessary for the list of items
      # to display properly.
      do.call(tagList, html_output_list)
    })
    lapply(1:14, function(i){ 
        htmlname <- paste("html", i, sep="")
        output[[htmlname]] <- reactive({
          paste('<script>number=',
                            i,
                            ';console.log(number);</script>')
          })
        })
    })
}
shinyApp(ui = ui, server = server)

单击go按钮,结果应该是1到14的有序序列号(因为数字i从1到14循环),但实际结果是14,1,2,...,13。尝试从1:20的i范围将生成一个序列为(14,15,16,17,18,1,19,2,3,4,5,6,7,8,20,9,9,1,11 ,12,13)。谁能解释一下这里发生了什么?怎么不遵循命令?显然,它既不是随机顺序。

1 个答案:

答案 0 :(得分:1)

也许这可能会有所帮助:

应用:R t

   library(shiny)
    library(shinyjs)
    ui <- tagList(
            useShinyjs(),
            fluidPage(
            actionButton("goButton", "Go!"),
            mainPanel(
                     uiOutput("result")
    )))
    server<-  function(input, output) {

            observeEvent(input$goButton, {
                lapply(1:50, function(j){

                        shinyjs::logjs(paste('number=', j))
                    })

            })

    }
    shinyApp(ui = ui, server = server)