[英]r shiny renderUI in a loop
我想输出几个表作为一个uiOutput。 如果我使用循环将它们放在一个列表中,那么所有输出都等于最后一个。 例:
library(shiny)
ui <- fluidPage(
mainPanel(
uiOutput("tables")
)
)
server <- function(input, output) {
output$tables <- renderUI({
data=array(rnorm(150),c(10,5,3))
tfc = function(m){
# x = m[1,1]
renderTable({m})
}
result=list()
for(i in 1:3)
result[[i]] = tfc(data[,,i])
return(result)
})
}
shinyApp(ui = ui, server = server)
如果我删除注释行(x = m [1,1]),我会得到所需的结果。
我可以忍受这种解决方法但是有一个原因可以解释为什么闪亮的表现或者有不同的方法来做到这一点?
我通常使用lapply
这样的用例。 这样,您就不会遇到延迟评估的问题。
library(shiny)
ui <- fluidPage(
mainPanel(
uiOutput("tables")
)
)
server <- function(input, output) {
output$tables <- renderUI({
data=array(rnorm(150),c(10,5,3))
tfc = function(m){renderTable({m})}
lapply(1:3, function(i){tfc(data[,,i])})
})
}
shinyApp(ui = ui, server = server)
如果你想使用一个反应表,你可以使用类似的东西
tfc = function(m, output, id){
output[[id]] <- renderTable({m()})
tableOutput(id)
}
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.