2017-10-06 78 views
0

我想輸出多個表作爲一個uiOutput。如果我使用循環將它們放在一個列表中,那麼所有輸出都等於最後一個。 實施例:r有光澤的renderUI在循環中

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])我獲得所需的結果。

我可以接受這種解決方法,但是爲什麼有光澤表現得像這樣或者有沒有其他方法可以做到這一點?

回答

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) 

如果你想使用reacive表,你可以使用像

tfc = function(m, output, id){ 
    output[[id]] <- renderTable({m()}) 
    tableOutput(id) 
} 

代替。