我正在尝试使用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
最佳答案
如果将datatable
世代和ui
世代的部分分开,将会更清楚:
library(shiny)
runApp(list(
ui = fluidPage(
mainPanel(
uiOutput('myTable')
)
),
server = function(input, output) {
output$aa <- renderDataTable({iris})
output$myTable <- renderUI({
dataTableOutput("aa")
})
}
))
关于r - 在Shiny中的renderUi中使用renderDataTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31813601/