如何设置图形设备的默认参数?

Ign*_*rov 13 r

我喜欢读黑色的白色.因此,在RI中可以采取以下措施:

par (bg = "black")
par (fg = "ivory1")
Run Code Online (Sandbox Code Playgroud)

我希望默认情况下设置这些选项.但是,人们不会简单地写入这些行,.Rprofile因为据我所知,在执行它时,图形设备尚未初始化.相反,正如另一个答案中所建议的那样,应该重新分配options()$device以包括必要的选项设置.我没有成功.

 

这是我试过的:

~/.Rprofile

f_device <- options()$device

blackdevice <- function (...) {

    f_device(...)

    par (bg       = "black")
    par (fg       = "ivory1")
}

options (device = blackdevice)
Run Code Online (Sandbox Code Playgroud)

这里的想法是将原始device函数保存到另一个变量,然后从我的新device函数中调用它.我得到的是:

Error in f_device(...) : could not find function "f_device"
Run Code Online (Sandbox Code Playgroud)

- 在我跑的时候plot (something).

 

我的另一个想法是这样:

~/.Rprofile

.First <- function () {

    options(f_device = options()$device)

    blackdevice <- function (...) {

        options()$f_device(...)

        par (bg       = "black")
        par (fg       = "ivory1")
    }

    options (device = blackdevice)
}
Run Code Online (Sandbox Code Playgroud)

- 在原来的device其他地方分配原件options.但这会导致:

Error in (function (...)  : attempt to apply non-function
Run Code Online (Sandbox Code Playgroud)

 

我没有想法.你能帮我搞清楚吗?

Jan*_*aan 13

一种解决方案似乎是定义在创建新绘图时调用的"钩子".来自以下文件plot.new:

在推进帧之前和之后立即调用了两个名为'"before.plot.new"'和'plot.new''(参见'setHook')的钩子.后者用于测试代码以注释新页面.不使用参数调用钩子函数.(如果值是字符串,则从'graphics'命名空间中调用'get'.)

以下似乎有效:

setHook("before.plot.new", function(...) {
  par(bg = "black",
    fg = "ivory1",
    col.axis = "ivory1",
    col.lab = "ivory1",
    col.main = "ivory1",
    col.sub = "ivory1")
})
Run Code Online (Sandbox Code Playgroud)


Rol*_*ASc 3

您的问题是处理device时尚未设置该选项。 因此,正是在这一点上,这导致了您所观察到的错误。.Rprofile
options()$deviceNULL

.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)
    }
)
Run Code Online (Sandbox Code Playgroud)

请注意,这是标准 R GUI 的解决方案,但不适用于例如 RStudio,后者随后设置自己的"RStudioGD"设备(并且要求已加载)。grDevices

(这也解释了重新定义以使其在搜索路径上领先的尴尬方法(来自您链接"RStudioGD".Rprofile问题"tools:rstudio"