首页 文章

在Shiny中使用renderUi中的renderDataTable

提问于
浏览
11

我正在尝试使用Shiny App来显示动态上下文,但我无法将 renderDataTable 工作到 renderUi 组件中 . 下面是两个简单的可复制测试:第一个没有工作,第二个没有 renderUi 工作正常 .

这两者之间的概念差异是什么,为什么第一个不能在 Shiny 中起作用?

这个不起作用:请注意,uiOutput myTable 包含两个无功分量,一个 selectInput 和一个 renderDataTable ,但只有 selectInput 被渲染 .

library(shiny)
runApp(list(
    ui = fluidPage(
            fluidRow(h2("where is the table?")),
            uiOutput('myTable')
    ),
    server = function(input, output) {
            output$myTable <- renderUI({
                    fluidPage(
                            fluidRow(selectInput("test", "test", c(1,2,3))),
                            fluidRow(renderDataTable(iris))
                    )
            })
    }
))

这没关系, selectInputrenderDataTable 都呈现:

library(shiny)
runApp(list(
    ui = fluidPage(
            fluidRow(h2("where is the table?")),
            fluidRow(selectInput("test", "test", c(1,2,3))),                
            fluidRow(dataTableOutput('myTable'))
    ),
    server = function(input, output) {
            output$myTable = renderDataTable(iris)
    }
))

如何让第一个场景有效?

谢谢 .

易辉评论后的编辑(感谢易辉):

renderUi 中必须使用一些 ui 函数,而不是一些渲染函数:以正确的方式更改示例代码,结果不会改变:仍然没有显示数据 .

library(shiny)
runApp(list(
    ui = basicPage(
            uiOutput('myTable')
    ),
    server = function(input, output) {
            output$myTable <- renderUI({dataTableOutput(iris)
            })
    }
))

编辑n.2

刚解决,让它运作如此:

library(shiny)
runApp(list(
    ui = fluidPage(
            mainPanel(

                    uiOutput('myTable')
            )
    ),
    server = function(input, output) {
            output$myTable <- renderUI({
                    output$aa <- renderDataTable(iris)
                    dataTableOutput("aa")
            })
    }
))

我必须先将 renderTableOutput 保存在输出变量中,然后将其输入 dataTableOutput .

谢谢你指点我:here

1 回答

  • 0

    如果拆分 datatable generation和 ui 代的部分会更清楚:

    library(shiny)
    runApp(list(
        ui = fluidPage(
                mainPanel(
                        uiOutput('myTable')
                )
        ),
        server = function(input, output) {
                output$aa <- renderDataTable({iris})
                output$myTable <- renderUI({
                        dataTableOutput("aa")
                })
        }
    ))
    

相关问题