Ошибка блестящей динамической таблицы "не может привести тип" замыкание "к вектору типа" символ ""
Это вопрос, полученный после ввода данных магазина в виде числового значения для создания трех таблиц в Shiny и аналогичных, но не равных r блестящей ошибке Ошибка в as.vector(x, "character"): невозможно привести тип 'closure' к вектору введите 'персонаж'
Я хочу создать большую таблицу, чтобы создать несколько таблиц после этой таблицы в приложении Shiny.
Вот мой MWE (кажется, проблема с названиями, h3 в пользовательском интерфейсе):
Полный сервер.R:
#
# This is the server logic of a Shiny web application. You can run the
# application by clicking 'Run App' above.
#
# Required libraries
if (!require("pacman")) install.packages("pacman")
p_load(shiny,dplyr,DBI,ggplot2)
# Define server logic
shinyServer(
function(input, output) {
display_table <- reactive({
t <- reactive({ as.character(input$year) })
# Read the RCA matrix
long_table = tbl_df(mpg) %>% filter(year == t())
return(long_table)
})
output$year = renderText(input$year)
output$miles <- DT::renderDataTable(DT::datatable({
display_table() %>% select(manufacturer,model,cty,hwy)
}))
output$desc <- DT::renderDataTable(DT::datatable({
display_table() %>% select(manufacturer,model,trans,class)
}))
}
)
Full ui.R:
#
# This is the user-interface definition of a Shiny web application. You can
# run the application by clicking 'Run App' above.
#
# Required libraries
if (!require("pacman")) install.packages("pacman")
p_load(shiny)
# Define UI for application that draws a histogram
shinyUI(fluidPage(
verticalLayout(
# Application title
titlePanel("ggplot2's mpg dataset example"),
mainPanel(
# User parameters
column(12,
tags$h3("Parameters"),
selectInput('year', 'Year', c("Select year",1999:2015), selected = 1999)
),
# Display tables
column(12,
#withMathJax(includeMarkdown("Theory.md")),
h3("Miles per gallon for cars made in the year",textOutput("year")),
DT::dataTableOutput("miles"),
h3("Description for cars made in the year",textOutput("year")),
DT::dataTableOutput("desc")
)
)
)
))
1 ответ
Проблема в том, что my_table является реактивным, и вы не можете вывести реактивный с DT::dataTableOutput()
, Вы можете сделать это только для объектов, созданных с DT::renderDataTable()
на сервере. Так
DT::dataTableOutput("my_table")
не сработает, но
DT::dataTableOutput("more_than_10")
будут. Если вы хотите отобразить всю таблицу, вы также должны создать таблицу данных, например, вот так:
output$my_table2 <- DT::renderDataTable(DT::datatable({
my_table()
}))
затем
DT::dataTableOutput("my_table2")
должно сработать. Надеюсь это поможет!
РЕДАКТИРОВАТЬ: Вы обновили свой ответ с MWE.
Было еще несколько проблем с этим MWE.
- Вы не можете использовать один и тот же выход дважды. Итак, два
textOutput('year')
заявления молча вылетят из вашего приложения. - Имейте в виду, когда что-то реагирует, а когда нет. нет необходимости
t()
после того, как вы присвоили значениеinput$year
к этому. - вам не нужен вызов пакета pacman;) и вам нужен ggplot2 для набора данных mpg.
Этот код работает:
library(ggplot2)
library(shiny)
library(dplyr)
server<- function(input,output)
{
display_table <- reactive({
t <- as.character(input$year)
# Read the RCA matrix
long_table = tbl_df(mpg) %>% filter(year == t)
return(long_table)
})
output$year = renderText(input$year)
output$year2 = renderText(input$year)
output$miles <- DT::renderDataTable(DT::datatable({
display_table() %>% select(manufacturer,model,cty,hwy)
}))
output$desc <- DT::renderDataTable(DT::datatable({
display_table() %>% select(manufacturer,model,trans,class)
}))
}
ui<- shinyUI(fluidPage(
verticalLayout(
# Application title
titlePanel("ggplot2's mpg dataset example"),
mainPanel(
# User parameters
column(12,
tags$h3("Parameters"),
selectInput('year', 'Year', c("Select year",1999:2015), selected = 1999)
),
# Display tables
column(12,
h3("Miles per gallon for cars made in the year",textOutput("year")),
DT::dataTableOutput("miles"),
h3("Description for carss made in the year",textOutput("year2")),
DT::dataTableOutput("desc")
)
)
)
))
shinyApp(ui,server)