我喜欢读黑底白字。因此,在R中,我将按照以下方式进行操作:
par (bg = "black")
par (fg = "ivory1")
我希望默认情况下设置这些选项。但是,并不是简单地将这些行写在
.Rprofile
中,因为据我了解,在执行时,图形设备尚未初始化。相反,如another answer中的建议,应该重新分配options()$device
以包括必要的选项设置。我没有成功。这是我尝试的:
~/.Rprofile
f_device <- options()$device
blackdevice <- function (...) {
f_device(...)
par (bg = "black")
par (fg = "ivory1")
}
options (device = blackdevice)
这里的想法是将原始的
device
函数保存到另一个变量,然后从我的新device
函数中调用它。我得到的是:Error in f_device(...) : could not find function "f_device"
—当时我运行
plot (something)
。我的另一个想法是像这样去:
~/.Rprofile
.First <- function () {
options(f_device = options()$device)
blackdevice <- function (...) {
options()$f_device(...)
par (bg = "black")
par (fg = "ivory1")
}
options (device = blackdevice)
}
—在
device
中的其他位置分配原始的options
。但这导致:Error in (function (...) : attempt to apply non-function
我没主意了。你能帮我解决这个问题吗?
最佳答案
您的问题是在处理device
时尚未设置.Rprofile
选项。
因此,此时的options()$device
是NULL
,这会导致您观察到错误。
在附加来自.First()
的程序包之前,也会执行options("defaultPackages")
函数,因此会出现相同的错误。
如果要在.Rprofile
中放入内容,则必须像这样:
setHook(
packageEvent("grDevices", "onLoad"),
function(...) {
f_device <- getOption("device")
blackdevice <- function(...) {
f_device(...)
par(bg = "black")
par(fg = "ivory1")
}
options(device = blackdevice)
}
)
请注意,这是针对标准R GUI的解决方案,但不适用于例如RStudio,此后设置自己的
"RStudioGD"
设备(并要求已加载grDevices
)。(这也解释了(根据您所链接的问题)在
"RStudioGD"
中重新定义.Rprofile
使其在搜索路径上领先于"tools:rstudio"
的尴尬方法)