我有一个shiny-app,可以在本地rstudio上正常运行,但不能在shinyapps.io
上运行。在这一点上,我咨询了Rstudio guidance,似乎没有一个明显的问题出现(例如,绝对路径)。问题似乎在于该应用程序找不到数据。我已经检查并重新检查,并使用代码将数据上传到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))
感谢您的帮助。
答案 0 :(得分:1)
如A. Suliman所建议的那样,解决方案是将服务器功能之前的所有内容放入单独的global.R脚本中。
答案 1 :(得分:1)
如前所述,您可以使用global.R脚本。
或者,如果您从varSelectInput()
中删除选择,例如,可以在很大程度上保留代码。 varSelectInput("variable", "Variable:", "")
。
然后,可以在server.R文件中添加一个updateVarSelectInput()
语句。这样,您甚至可以在dat
变量上添加交互式过滤器,并且选择将相应更改。在这种情况下,您不一定需要global.R文件。
有关示例,请参见?updateSelectInput
。