Блестящая таблица Выход: 'Ошибка: не удалось найти функцию "df"' - PullRequest
0 голосов
/ 26 мая 2020

Когда я пытаюсь закодировать tableOutput или DTOutput в моем приложении Shiny, я получаю сообщение «Ошибка: не удалось найти функцию daysSince10». (). Есть идеи, почему это не работает?

library(shiny)
library(tidyverse)

daysSince10 <- read_csv("https://raw.githubusercontent.com/joegoodman94/CoronavirusTracker/master/days10.csv")

ui <- fluidPage(
  titlePanel("Coronavirus Tracker"),
  sidebarLayout(
    sidebarPanel(selectInput('Country', 'Select Country', multiple = T, unique(daysSince10$`Country`))),
    mainPanel(
      tabsetPanel(
        tabPanel("Plot", plotly::plotlyOutput('trend')),
        tabPanel("Table", DT::DTOutput('table'))
      )
    )
  )
)

server <- function(input, output, session) {
  observe({
    moddays <- daysSince10[daysSince10$`Country` %in% input$Country,]
    output$trend <- plotly::renderPlotly({
      validate(
        need(input$Country, "please select a country")
      ) 
      ggplot(moddays) +
        geom_line(aes(x = `Days since tenth death`, y = `Total Deaths`, color = `Country`)) +
        scale_y_log10()
    })
    output$table <- DT::renderDT({
      validate(
        need(input$Country, "please select a country")
      )      
      daysSince10()
    })
  })
}

shinyApp(ui = ui, server = server)

Ответы [ 2 ]

1 голос
/ 26 мая 2020
Назначения

output$XXX <- renderYYY() обычно должны находиться вне observe().

Было ли output$table предназначено для moddays, а не daysSince10? Предполагая, что это так:

server <- function(input, output, session) {
  moddays <- reactive({
    daysSince10[daysSince10$`Country` %in% input$Country,]
  })

  output$trend <- plotly::renderPlotly({
    validate(
      need(input$Country, "please select a country")
    ) 
    ggplot(moddays()) +
      geom_line(aes(x = `Days since tenth death`, y = `Total Deaths`, color = `Country`)) +
      scale_y_log10()
  })

  output$table <- DT::renderDT({
    validate(
      need(input$Country, "please select a country")
    )      
    moddays()
  })
}

Делает moddays самостоятельной реакцией, которая теперь должна называться в последующем коде как moddays() (вызов функции)

0 голосов
/ 26 мая 2020

Не пишите daysSince10(), а daysSince10 без скобок. Из-за них R ищет функцию с именем daysSince10, которой не существует.

output$table <- DT::renderDT({
  validate(
    need(input$Country, "please select a country")
  )      
  daysSince10
})
...