我喜欢读黑底白字。因此,在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()$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)
    }
)


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

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

07-24 09:51
查看更多