Содержимое функции.First не обрабатывается при запуске в RStudio.
В моем .Rprofile
Я определил следующее .First
функция, которая имеет две цели:
- Показать доступные пути к библиотекам
Изменить настройки
colorout
пакет, если работает RStudio с яркой темой.First <- function() { if (interactive()) { cat( "\nProcessed RProfile at:", date(), "\n", "Available libraries", "\n", paste(.libPaths(), collapse = "\n "), "\n" ) # Check if running bright theme and adjust colour settings if (assertive::is_rstudio()) { theme_info <- rstudioapi::getThemeInfo() if (!theme_info$dark) { colorout::setOutputColors( normal = 2, negnum = 3, zero = 3, number = 3, date = 3, string = 6, const = 5, false = 5, true = 2, infinite = 5, index = 2, stderror = 4, warn = c(1, 0, 1), error = c(1, 7), verbose = TRUE, zero.limit = NA ) } } } }
проблема
При работе в терминале функция возвращает желаемые результаты:
Тем не менее, контент, который будет создан .First
функция не показывает:
также настройки цвета, кажется, не применяются. Когда я получаю и вызываю функцию как .First()
тогда это работает без проблем.
Я хочу понять, что отличает запуск RStudio от того, что он не дает результатов, эквивалентных сеансу R, запущенному в терминале и обращающемуся к нему .Rprofile
?
1 ответ
Ну, с одной стороны, все тело функции обернуто в if(interactive()){}
, interactive
функция вернется TRUE
и, следовательно, код будет запускаться при запуске вашей функции из командной строки. Но когда .First
запускается автоматически при запуске, interactive
функция возвращает FALSE
и все тело функции пропущено.
Похоже, что когда сеанс начинает быть интерактивным, при запуске RStudio он может отличаться от Rterm. Вы можете проверить это, поместив такой код в начале .First
:
if(interactive()) {
cat('Interactive is TRUE\n')
} else {
cat('Interactive is FALSE\n')
}