Eksperymentuję z Shiny App, aby wyświetlać dynamiczne konteksty, ale nie mogę uzyskać renderDataTable działającego na komponent renderUi.Używanie renderDataTable w renderUi w Shiny
Poniżej dwa proste powtarzalne testy: pierwszy nie działa, drugi bez renderUi działa dobrze, oczywiście.
Jaka jest różnica między tymi dwiema koncepcjami i dlaczego pierwsza nie może działać w wersji Shiny?
Ten nie działa: należy zauważyć, że uiOutput "myTable" zawiera dwa komponenty reaktywne, selectInput i renderDataTable, ale tylko selectInput jest renderowany.
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))
)
})
}
))
To jest w porządku, zarówno selectInput i renderDataTable są renderowane:
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)
}
))
Jak dostać pracę pierwszy scenariusz?
Dzięki.
EDYCJA po Yihui komentarzu (dzięki Yihui):
W renderUi musi być stosowany jakąś funkcję UI, a nie jakąś funkcję render: zmienił przykładowy kod w prawidłowy sposób, wynik nie zmienia: nadal żadne dane nie są wyświetlane.
library(shiny)
runApp(list(
ui = basicPage(
uiOutput('myTable')
),
server = function(input, output) {
output$myTable <- renderUI({dataTableOutput(iris)
})
}
))
EDIT n.2
Wystarczy rozwiązany, dostał pracę tak:
library(shiny)
runApp(list(
ui = fluidPage(
mainPanel(
uiOutput('myTable')
)
),
server = function(input, output) {
output$myTable <- renderUI({
output$aa <- renderDataTable(iris)
dataTableOutput("aa")
})
}
))
muszę zapisać renderTableOutput w zmiennej wyjściowej pierwszy, a następnie wprowadzenie go do dataTableOutput.
Dzięki za naprowadzenie mnie na: https://groups.google.com/d/msgid/shiny-discuss/d9bf5ede-7403-4a42-9831-fa9e0c0974d3%40googlegroups.com?utm_medium=email&utm_source=footer
Prawdopodobnie to samo pytanie jak https://groups.google. pl/d/msgid/shiny-discuss/d9bf5ede-7403-4a42-9831-fa9e0c0974d3% 40googlegroups.com? utm_medium = email & utm_source = footer –
dzięki Yihui, zaktualizowałem pytanie nowym kodem po przejrzeniu odpowiedzi w https: // groups.google.com/d/msgid/shiny-discuss/d9bf5ede-7403-4a42-9831-fa9e0c0974d3%40googlegro ups.com?utm_medium=email&utm_source=footer. , ale wciąż nie ma szczęścia. – curious
Nie mogę zrozumieć, dlaczego chcesz "obudować" 'renderDataTable' wewnątrz' renderUI' ... Jeśli musisz utworzyć "złożoną strukturę", nie możesz użyć 'fluidPage' /' fluidRow'/'column'/'div'/... z jednym lub więcej' * output'? –