首页 > 解决方案 > 仅在当天首次登录时从 .Rprofile 执行 .First()

问题描述

我知道可以使用调度程序来调度脚本和进程,cron以便在 R 本身的特定时间点自动化 R 进程。我也知道你可以在你的函数中放置函数.Rprofile,让它们在每次启动 R 时执行。

我想出了如何.First()仅在星期一运行一个函数,但希望它只在用户RStudio在该星期一第一次打开时运行。

这是我到目前为止所拥有的.Rprofile

.First <- function(){
        today <- weekdays(as.Date(Sys.Date()))
if (today == "Monday"){
       print("Today is "Monday")
} else {
       print("Today is not Monday")
        }
}

我想添加到此代码中的是一种检查日志的方法,并且仅在用户当天第一次登录时显示消息,而不是每次他们打开/关闭项目、重新启动 R时显示消息。

标签: rautomationrstudio

解决方案


此代码测试名为 LogFile.txt 的文件。Ypu 可能想要将其命名为其他名称或将其隐藏在某个不起眼的目录中。如果文件存在,则代码读取文件的第一行。然后它将今天的日期存储在文件的第一行以处理以后的登录。如果文件的第一行包含今天的日期,则该函数只返回以便不运行星期一的测试。如果文件不存在或不包含今天的日期,则运行星期一测试。

.First <- function(){
    today <- as.Date(Sys.Date())
    LastLog <- ""
    if(file.exists("LogFile.txt")) {
       LogFile <- file("LogFile.txt", open="r")
       LastLog <- readLines(LogFile, 1L)
       close(LogFile)
    }
    LogFile <- file("LogFile.txt", open="w")
    writeLines(as.character(today), LogFile) 
    close(LogFile)

    if(LastLog == as.character(today)) {
       # Already logged on today, just exit
       return()
    }

    ## If you get here, Need to run the first login code
    DOW <- weekdays(today)
    if (DOW == "Monday") { 
       print("Today is Monday") 
    } else {
       print("Today is not Monday")
    }
}

推荐阅读