Добавьте DT расширения, используя Shiny и selectinput - PullRequest
0 голосов
/ 06 июля 2019

Попытка добавить следующую информацию в таблицу данных в Shiny и получение ошибок при использовании selectinput:

Ошибка: неверное число измерений

library(DT)
library(readr)
library(jsonlite)
library(data.table)

gumdad <- fromJSON("data/boxes.json")
# Define UI for app  ----
ui <- fluidPage(

  # App title ----
  titlePanel("Box Scores"),

#FILTERS
selectInput("season",
            "Season:",
          c("All",
         unique(as.character(gumdad$season)))),
    # Main panel for displaying outputs ----
    mainPanel(
      # Output: Table----
      DT::dataTableOutput('tableone')

    )
  )

# Define server logic  ----
server <- function(input, output) {

output$tableone = renderDataTable({
  data <- datatable(gumdad, extensions = 'Buttons', rownames = FALSE, escape = FALSE, selection = 'none',
        colnames = c('Season', 'Date', 'Opponent', 'Result', 'UNC', 'Opp', 'OT', 'Location', 'Type','Box Score'),
        options = list(buttons = c('copy', 'csv'), paging = FALSE, dom = 'Bfrtip')
    )
    if (input$season != "All") {
data <- data[data$season == input$season,]
}
  return(data)
 })


gumdad$box <- sapply(gumdad$box, function(x)
            toString(tags$a(href=paste0("https://boxscorexxx.com/", x), "Box Score")))
}
shinyApp(ui = ui, server = server)

Как можно использовать selectInput при настройке datatable с правильными размерами?

1 Ответ

0 голосов
/ 06 июля 2019

В вашем коде data не является фреймом данных, это данные. Невозможно поднастроить это так: data[data$season == input$season,]. Подмножество gumdad вместо:

output$tableone = renderDT({
  data <- gumdad
  if (input$season != "All") {
    data <- data[data$season == input$season,]
  }
  datatable(data, extensions = 'Buttons', rownames = FALSE, escape = FALSE, selection = 'none',
                    colnames = c('Season', 'Date', 'Opponent', 'Result', 'UNC', 'Opp', 'OT', 'Location', 'Type','Box Score'),
                    options = list(buttons = c('copy', 'csv'), paging = FALSE, dom = 'Bfrtip')
  )
})

Также обратите внимание, что вы должны использовать renderDT вместо renderDatatable (или использовать DT::renderDatatable, что совпадает с renderDT).

...