R Как отобразить сообщение () только один раз за сеанс? - PullRequest
2 голосов
/ 13 марта 2020

У меня есть предупреждение, которое я хочу отобразить только один раз во время сеанса. Есть ли причудливый способ сделать это, который не включает в себя сохранение нового объекта в среде и проверку его значения каждый раз?

value <- 2
checkval <- function(x) if(x == 2) message("Warning, value is 2. This message will only be displayed once")

checkval(value)
#> Warning, value is 2. This message will only be displayed once

checkval(value) #second time, don't want it to display the warning.
#> Warning, value is 2. This message will only be displayed once

Создано в 2020-03-12 представьте пакет (v0.3.0)

1 Ответ

0 голосов
/ 13 марта 2020

Один из способов - создать временный файл, который может предоставить информацию о том, был ли checkval вызван в текущем сеансе

checkval = function(value) {
    checkTemp = list.files("~", "temp.txt")

    currentTime = Sys.time()

    start = currentTime - proc.time()["elapsed"]
    attr(start, "tzone") = "UTC"
    attr(currentTime, "tzone") = "UTC"

    if (value == 2) {
        if (length(checkTemp) == 0){
            message("Message1")
            cat(as.character(currentTime), file = "~/temp.txt", append = FALSE)
        } else {
            lastDate = as.POSIXct(readLines("~/temp.txt", warn = FALSE), tz = "UTC")
            if (start > lastDate) {
                message("Message2")
                cat(as.character(currentTime), file = "~/temp.txt", append = FALSE)
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...