我想将多个表作为一个 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)
}
instead.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)