2017-10-06 19 views
0

私は1つのuiOutputとして複数のテーブルを出力したいと思います。ループを使ってそれらをリストにまとめると、すべての出力が最後のものと等しくなります。 例:r shiny renderUI in loop

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])Iは、所望の結果を得ます。

私はこの回避策で暮らすことができますが、光沢がそのように振る舞う理由があるのでしょうか、それとも違う方法がありますか?

答えて

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) 
} 

のようなものを使用することができます。この問題を回避するには