我喜欢读黑色的白色。所以,在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
我没有想法。你能帮我搞清楚吗?
答案 0 :(得分:13)
一个解决方案似乎是定义一个&#39; hook&#39;在创建新绘图时调用。来自plot.new
的文档:
有两个钩子叫做'&#34; before.plot.new&#34;'和'&#34; plot.new&#34;'(见 'setHook')在推进框架之前和之后立即调用。 后者用于测试代码以注释新页面。该 没有参数调用钩子函数。 (如果值是a 字符串,'get'在'graphics'中被调用 命名空间。)
以下似乎有效:
setHook("before.plot.new", function(...) {
par(bg = "black",
fg = "ivory1",
col.axis = "ivory1",
col.lab = "ivory1",
col.main = "ivory1",
col.sub = "ivory1")
})
答案 1 :(得分:2)
此处的问题是,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"
的尴尬方法(来自您关联的问题)