【问题标题】:updating data regularly from a website shiny定期从闪亮的网站更新数据
【发布时间】:2021-11-23 05:39:34
【问题描述】:

我有一个闪亮的应用程序使用来自不同网站的数据,所有这些数据都是每月的。它们由网站处理程序在不同时间更新。我最初是在我的应用程序中直接从网站读取数据,但其中一个网站进行了 2 天的维护,我无法运行我的应用程序。我不希望那种情况再次发生。所以我想把数据保存在我的本地文件中,这样代码才能运行。

由于需要将数据更新为最新的可用值,因此我需要调度方面的帮助。我希望此代码每月运行一次,以便我的数据始终是最新的。

dMean <- function(d){
                  dd <- d  %>% filter(!between(month, 4, 10)) %>%
                    arrange(Year, month) %>%
                    filter(!(Year == min(Year) & month %in% 1:3 | 
                               Year == max(Year) & month %in% 11:12)) %>%
                    group_by(grp = cumsum(month == 11)) %>%
                    summarise(Year = last(Year),
                              value = mean(value)) %>%
                    select(-grp)
                  return(dd)
               }
    
dG1 <- fread('https://www.metoffice.gov.uk/hadobs/hadcrut4/data/current/time_series/HadCRUT.4.6.0.0.annual_ns_avg.txt',
             header = FALSE,select = c(1:2))
GTA1 <- as.matrix(dG1)
saveRDS(GTA1,"GTA.rds")

dM1 <- fread('https://psl.noaa.gov/data/correlation/mei.data',header = FALSE,fill = TRUE)
dM2 <- dM1[complete.cases(replace(dM1, dM1 == -999.000, NA)),]
dM3 <- matrix(as.numeric(unlist(dM2)),nrow=nrow(dM2))
dM4 <- data.frame(Year = rep(unique(dM3[,1]), each = 12),month = 1:12,value = as.vector(t(dM3[,2:13])))
MEI1 <- as.matrix(dMean(dM4))
saveRDS(MEI1,"MEI.rds")

dS1 <- fread('https://www.cpc.ncep.noaa.gov/data/indices/sstoi.indices',header = TRUE,select = c(1,2,10))
dS2 <- as.matrix(dS1)
dS3 <- data.frame(Year = dS2[,1],month = dS2[,2], value = dS2[,3])
SST1 <- as.matrix(dMean(dS3))
saveRDS(SST1,"SST.rds")

我将不胜感激。

【问题讨论】:

  • 对不起,我不明白你的问题。您是希望您的shinyApp 定期保存数据并在某些情况下读取数据,还是您想在您的应用程序之外使用脚本来保存数据,然后您想知道您的shinyapp 如何读取数据?
  • 我希望我的闪亮应用程序每个月从这些网站读取数据,比如第一天,并保存并替换旧数据文件。因此,数据将始终是最新的,以供进一步处理。我需要安排时间方面的帮助。我希望我在这里提供的代码每月运行一次。
  • 根据您的评论,我认为您的问题存在于应用程序之外。您想找到一种方法在特定计划中运行 R 脚本,该计划由您的操作系统确定(或者您可以在容器中运行此脚本)。然后,在您闪亮的应用程序上,您可以将数据读取部分放在 tryCatach 中:如果尝试从 Web 读取失败,则求助于从磁盘读取。

标签: r shiny auto-update


【解决方案1】:

如果您将脚本放在基于 linux 的操作系统中,则可以使用 crontab 命令定期运行它。 crontab 命令以用户定义的计划方式执行应用程序,从每小时到每月一次。请阅读 linux crontab 命令的手册,如下所示:

https://phoenixnap.com/kb/set-up-cron-job-linux

例如,每个月 1 日运行 R 脚本的作业将被编写:

0 0 1 * * Rscript 用户文件.R

【讨论】:

  • 感谢您的建议。正如您所提到的,对此的要求是基于 Linux 的操作系统。那么这是解决这个问题的唯一选择吗?我在我的工作计算机上更改操作系统可能是不可能的。
  • 我使用 Ubuntu。不知道其他操作系统怎么样。但是,我相信其他操作系统也具有与 Ubuntu 中的 crontab 相同的功能。
  • 查看 taskscheduleR 包,用于相当于 crontab 的 windows。你甚至有一个 rstudio 插件来配置你的任务。
  • 我会查看tasksheduleR。谢谢
  • 感谢tasksheduleR的建议。我用一个小代码尝试了它,它可以工作。正是我想要的。
猜你喜欢
  • 2019-01-07
  • 2021-02-13
  • 2021-12-06
  • 2019-03-18
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
相关资源
最近更新 更多