Обнаружение того, как запускается файл R
Код R может запускаться различными способами, например, вызываться через , загружаться из пакета или считываться из
stdin
. Я хотел бы обнаружить это, чтобы создавать файлы, которые могут работать во множестве контекстов.
Текущий скрипт экспериментального детектора находится здесь: https://gitlab.com/-/snippets/2268211
Некоторые тесты немного эвристичны и основаны на наблюдениях, а не на документации. Например, я не уверен, какой из двух тестов для запуска под
littler
лучше:
if(Sys.getenv("R_PACKAGE_NAME") == "littler"){
message("++ R_PACKAGE_NAME suggests running under littler")
mode_found <- TRUE
}
if(Sys.getenv("R_INSTALL_PKG") == "littler"){
message("++ R_INSTALL_PKG suggests running under littler")
mode_found <- TRUE
}
и тест на загрузку из пакета просто проверяет, является ли текущая среда пространством имен:
if(isNamespace(environment())){
message("++ Being loaded by a package")
mode_found <- TRUE
}
что кажется правдой во время загрузки пакета, но я полагаю, что это может быть правдой в других контекстах, например, при чтении с
source
с
local
аргумент, который является пространством имен.
В конце концов, я подозреваю, что большинство этих случаев не будут иметь большого значения для моего приложения, но кому-то может быть полезно иметь как можно более полный набор тестов обнаружения.
Итак, все ли в порядке с тестами в моем скрипте детектора и как их можно улучшить?