在 RStudio 中 运行 时,.First 函数的内容似乎未被处理
Content of the .First function does not appear to be processed when running in RStudio
在我的 .Rprofile
中,我定义了以下具有两个目的的 .First
函数:
- 显示可用的库路径
如果 运行 RStudio 具有明亮的主题
,请更改 colorout
包的设置
.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
)
}
}
}
}
问题
当运行在终端函数中returns得到想要的结果:
但是,.First
函数生成的内容不会显示:
颜色设置似乎也不适用。
当我将函数作为 .First()
来源并调用时,它可以正常工作。
我想了解 RStudio 启动的不同之处在于它不会在终端中产生与 R 会话 运行 相同的结果并访问相同的结果 .Rprofile
?
一方面,函数的整个主体都包含在 if(interactive()){}
中。 interactive
函数将 return TRUE
因此,当您从命令行 运行 您的函数时,代码将 运行 。但是当 .First
在启动时自动为 运行 时,interactive
函数 returns FALSE
和整个函数体被跳过。
与 Rterm 相比,RStudio 启动时会话开始交互的时间似乎有所不同。您可以通过将这样的代码放在 .First
:
的开头来测试它
if(interactive()) {
cat('Interactive is TRUE\n')
} else {
cat('Interactive is FALSE\n')
}
在我的 .Rprofile
中,我定义了以下具有两个目的的 .First
函数:
- 显示可用的库路径
如果 运行 RStudio 具有明亮的主题
,请更改colorout
包的设置.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 ) } } } }
问题
当运行在终端函数中returns得到想要的结果:
但是,.First
函数生成的内容不会显示:
颜色设置似乎也不适用。
当我将函数作为 .First()
来源并调用时,它可以正常工作。
我想了解 RStudio 启动的不同之处在于它不会在终端中产生与 R 会话 运行 相同的结果并访问相同的结果 .Rprofile
?
一方面,函数的整个主体都包含在 if(interactive()){}
中。 interactive
函数将 return TRUE
因此,当您从命令行 运行 您的函数时,代码将 运行 。但是当 .First
在启动时自动为 运行 时,interactive
函数 returns FALSE
和整个函数体被跳过。
与 Rterm 相比,RStudio 启动时会话开始交互的时间似乎有所不同。您可以通过将这样的代码放在 .First
:
if(interactive()) {
cat('Interactive is TRUE\n')
} else {
cat('Interactive is FALSE\n')
}