在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)。谁能解释一下这里发生了什么?怎么不遵循命令?显然,它既不是随机顺序。
答案 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)