首页 > 解决方案 > Shinyapps.io上的闪亮应用程序失败,找不到数据

问题描述

我有一个中运行良好,但在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))

谢谢你的帮助。

标签: rshinyrstudioshinyapps

解决方案


如前所述,您可以使用 global.R 脚本。

或者,您可以在很大程度上保持您的代码原样,如果您从 中删除选项varSelectInput(),例如varSelectInput("variable", "Variable:", ""). 然后,在您的 server.R 文件中,您可以添加一条updateVarSelectInput()语句。这样,您甚至可以在dat变量上添加交互式过滤器,并且选择会相应改变。在这种情况下,您不一定需要 global.R 文件。

?updateSelectInput一个很好的例子。


推荐阅读