Ошибка блестящей динамической таблицы "не может привести тип" замыкание "к вектору типа" символ ""

Это вопрос, полученный после ввода данных магазина в виде числового значения для создания трех таблиц в 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)
Другие вопросы по тегам