Выполните .First () из .Rprofile только при первом входе в день - PullRequest
0 голосов
/ 31 марта 2019

Я знаю, что можно планировать сценарии и процессы с помощью планировщика 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 Ответ

1 голос
/ 31 марта 2019

Этот код проверяет файл с именем 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")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...