仅在当天首次登录时从.Rprofile执行.First()。

时间:2019-03-31 16:56:53

标签: r automation rstudio

我知道人们可以使用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,等。

1 个答案:

答案 0 :(得分:1)

此代码测试名为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")
    }
}