我正在尝试使用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))
)
})
}
))
这很好,selectInput
和renderDataTable
都会呈现:
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
答案 0 :(得分:0)
如果你拆分datatable
代和ui
代的部分会更清楚:
library(shiny)
runApp(list(
ui = fluidPage(
mainPanel(
uiOutput('myTable')
)
),
server = function(input, output) {
output$aa <- renderDataTable({iris})
output$myTable <- renderUI({
dataTableOutput("aa")
})
}
))