1

在我.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

4

1 回答 1

2

一方面,函数的整个主体都包裹在if(interactive()){}. 该interactive函数将返回TRUE,因此当您从命令行运行函数时代码将运行。但是当.First在启动时自动运行时,interactive函数会返回FALSE并跳过整个函数体。

看起来,与 Rterm 相比,RStudio 启动时会话开始交互的时间可能不同。您可以通过将这样的代码放在开头来测试它.First

if(interactive()) {
  cat('Interactive is TRUE\n')
} else {
  cat('Interactive is FALSE\n')
}
于 2018-07-11T17:23:37.423 回答