Обнаружение того, как запускается файл 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аргумент, который является пространством имен.

В конце концов, я подозреваю, что большинство этих случаев не будут иметь большого значения для моего приложения, но кому-то может быть полезно иметь как можно более полный набор тестов обнаружения.

Итак, все ли в порядке с тестами в моем скрипте детектора и как их можно улучшить?

0 ответов

Другие вопросы по тегам