Содержимое функции.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')
}
Другие вопросы по тегам