блестящее приложение не работает на shinyapps.io, данные не найдены - PullRequest
1 голос
/ 21 марта 2020

У меня есть , которое прекрасно работает в локально, но не на shinyapps.io. Я обратился к руководству Rstudio по этому вопросу, и ни одна из очевидных проблем не кажется присутствующей (например, абсолютные пути). Кажется, проблема в том, что приложение не находит данные; Я проверил и перепроверил и загружаю данные в shinyapps.io с кодом. Ошибка в файле журнала:

Предупреждение: ошибка в is.data.frame: объект 'dat' не найден.

Это файл server.R :

library(ggplot2)

layerFit <- function(fit){
  geom_line(data = fit,
            aes(x, y), color="red",size = 1, linetype = 2)
}

dat <- read.csv("data.csv", stringsAsFactors = F, na.strings = "NA")

dat$date <- as.Date(paste0(dat$month, "-", dat$day), format = "%m-%d")
dat$time <- 1:nrow(dat)

server = function(input, output) {

  expfit <- reactive({
   dat2 <- dat[!is.na(dat[[input$variable]]),]
    mod <- lm(as.formula(paste("log(",input$variable, ") ~ time")), dat2)
    expfit <- data.frame(x = dat2$date,
                         y = exp(fitted(mod)))

    return(expfit)
  })


  output$data <- renderPlot({
    fit <- expfit()
    p <- ggplot(dat, aes(y = !!input$variable, x= date))+
      geom_point() +geom_line()+
    if(input$toggleExpFit) p = p + layerFit(fit)
    p
  })
}

А это файл ui.R:

ui <- fluidPage(
  varSelectInput("variable", "Variable:", dat[,c("x","y")]),
  checkboxInput("toggleExpFit", label = "Exponential model", value = FALSE), 
  plotOutput("data")
)

Вы можете создать поддельные данные, такие как файл data.csv:

dat <- data.frame(day  1:20, month = 1, x = rnorm(20), y = rnorm(20))

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Как описано, вы можете работать со скриптом global.R.

В качестве альтернативы вы можете в значительной степени сохранить свой код как есть, если вы удалите варианты из varSelectInput(), например varSelectInput("variable", "Variable:", ""). Затем в вашем файле server.R вы можете добавить оператор updateVarSelectInput(). Таким образом, вы могли бы даже добавить интерактивные фильтры к вашей переменной dat, и выбор изменится соответственно. В этом случае вам не обязательно нужен файл global.R.

См. ?updateSelectInput для хорошего примера.

1 голос
/ 21 марта 2020

Как предполагает А. Сулиман, решение состоит в том, чтобы поместить все перед функцией сервера в отдельный скрипт global.R.

...