У меня есть проблемы с реактивной таблицей в Shiny R - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь создать панель инструментов, используя блестящий в R, но я сталкиваюсь с некоторыми небольшими проблемами

У меня есть:

db - это мой data.frame с:

db$domain:chr, 
db$date:chr,
db$value:num.

Итак, я создал:

db_4 <- reactive({ subset(db,db$domain %in% input$domain &
db$date<=input$daterange[2] & db$date>=input$daterange[1]})

входные данные:

input$domain: selectinput with multiple choices,
input$date: daterangeinput.

Я пытаюсь создать таблицу, которая дает мне суммузначение db $, агрегированное по дате db $.Я пробовал что-то вроде:

output$table2 <- rendertable ({aggregate(db_4()["value"], by=list(db_4()["date"]), sum) })

, но я всегда получаю пустую таблицу.

Кто-нибудь может мне помочь в решении этой маленькой проблемы?

Большое спасибо

1 Ответ

0 голосов
/ 21 марта 2019

Я настоятельно рекомендую вам прочитать эту статью об отладке.

В Shiny вы можете использовать функцию browser() в функциях reactive и render. Это должно помочь вам найти проблему (т.е. данные имеют ожидаемую структуру)

Кажется, проблема в функции aggregate: db_4()["date"] возвращает data.frame, где вам нужен вектор.

Решение:

library(shiny)

db <- data.frame(
  domain = letters[1:3],
  date = seq(
    from = as.Date("2019-01-01"),
    to = as.Date("2019-06-01"),
    by = "1 months"
  ),
  value = runif(12)
)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("domain", "Domain", choices = unique(db$domain)),
      dateRangeInput("daterange", "Date", 
                     min = min(db$date), max = max(db$date),
                     start = min(db$date), end = max(db$date))  
    ),
    mainPanel(
      tableOutput("table2")      
    )
  )
)

server <- function(input, output, session) {
  db_4 <- reactive( { 
    subset(db, 
      db$domain %in% input$domain &
      db$date<=input$daterange[2] & 
      db$date>=input$daterange[1]
    )
  })

  output$table2 <- renderTable( {
    req(db_4()) # Don't render table when db_4() is NULL

    # Uncomment next line to check if everything goes as expected
    #browser()
    aggregate(
      data.frame(value = db_4()$value), 
      by=list(date = as.factor(db_4()$date)), 
      sum
    )
  })
}

shinyApp(ui, server)

Также я настоятельно рекомендую поделиться кодом вашего минимального примера, включая некоторые фиктивные данные, чтобы их можно было мгновенно скопировать. Это увеличит шансы того, что кто-то ответит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...