2016-11-11 13 views
1

これはShiny htmlOutputの内部でループを使用すると、本当に変わった動作です。私がやろうとしてきたことは、Shiny htmlOuputからJavascriptコード(console.log)を実行し、ループ番号をコンソールに出力することです。以下のコードを参照してください:14,1ですが、実際の結果(iは1から14までループ数として)Goボタンをクリックするとshiny htmlOutputのループは、順番に実行されません

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) 

を、結果は1〜14から順序付けられたシーケンス番号である必要があり、 2、...、13。 1時20分からiの範囲を試してみると、(14,15,16,17,18,1,19,2,3,4,5,6,7,8,20,9,10,11 、12,13)。誰でもここで何が起こっているのか説明できますか?どうやって注文に従わないの?明らかに、それはランダムな順序ではありません。

答えて

1

多分これが助けることができる:

アプリ: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

をこれが正しい答えを与えるかもしれないが、それは私の目的とは若干異なります。出力前に配列(x)にJavascriptを割り当ててループを終了しました。ループ内で出力することは可能ですか?私のコードはこれを達成することですが、実行は正しい順序に従いません。ありがとう。 – uPhone

+0

logjs関数を使ってshinyjsパッケージを試してみてください。修正された答えを確認してください。 –

関連する問題