2016-11-11 1 views
1

Dies ist ein wirklich seltsames Verhalten für die Verwendung von Schleife in einem Shiny HTMLOutput. Was ich versucht habe, ist sehr einfach, führe einen Javascript-Code (console.log) aus dem Shiny htmlOuput aus und drucke die Loop-Nummer auf die Konsole. Siehe Code unten:für Schleife in Shiny htmlOutput führt nicht in Reihenfolge

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) 

Durch die Go-Taste zu klicken, sollte das Ergebnis sein eine geordnete Folge Zahl von 1 bis 14 (wie die Anzahl i von 1 bis 14 Schleifen), aber das tatsächliche Ergebnis mit 14,1 Zoll ist, 2, ..., 13. Versuchen Sie die Reichweite von i von 1:20 wird eine Folge als (14,15,16,17,18,1,19,2,3,4,5,6,7,8,20,9,10,11 , 12,13). Kann mir jemand erklären, was hier vor sich geht? Wie kommt es, dass es nicht der Reihenfolge folgt? Offensichtlich ist es keine zufällige Reihenfolge.

Antwort

1

Vielleicht könnte dies helfen:

App: R

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) 
+0

dies die richtige Antwort geben kann, aber es ist von meinem Zweck etwas anders. Sie haben die Schleife beendet, indem Sie das Javascript einem Array (x) vor der Ausgabe zugewiesen haben. Ist es möglich, innerhalb der Schleife auszugeben? Mein Code soll dies erreichen, aber die Ausführung folgt nicht der richtigen Reihenfolge. Vielen Dank. – uPhone

+0

Probieren Sie das Paket shinyjs mit der logjs-Funktion aus. Überprüfen Sie die geänderte Antwort. –

Verwandte Themen