.Rprofile 中的别名函数名称,以便所有 R 脚本都使用它

Alias function name in .Rprofile so that it is used by all R Scripts

我目前正在尝试使用 CairoPNG 为 R 函数 png 添加别名以生成 png 文件。我来自系统管理员对 R 的看法——这意味着我没有编写任何 R 代码,而且我无法更改任何 R 代码。我在弹性 HPC 环境中的管道中 运行 它。由于环境的性质,我必须在启动时在每个执行节点上安装 X11、cairo 等(这会给每个作业增加 2-3 分钟的任意时间)。

我一直在玩弄并安装了 R 包 Cairo,它可以在没有 X11 转发的情况下生成 png,这正是我所需要的。如果我尝试默认使用 png

cars <- c(1,3,5)
png("cars.png")
Error in png("cars.png") : X11 is not available

我意识到我可以通过在活动会话中将 CairoPNG 分配给 png 来规避此问题:

cars <- c(1,3,5)
png <- CairoPNG
png("cars.png")
plot(cars)

生成一个名为 cars.png 的 .png 文件。因此,我希望从 .Rprofile 中做同样的事情,其中​​每个依赖 png 的 R 脚本实际上都会在引擎盖下使用 CairoPNG

在我的 .Rprofile 中,我添加了:

require("Cairo")
png <- CairoPNG

当我通过命令行启动一个新的交互式 R 会话时,我可以看到正在使用 Cairo,但是 png <- CairoPNG 的分配不起作用:

Loading required package: Cairo
> png("cars.png")
Error in png("cars.png") : X11 is not available

如有任何帮助,我们将不胜感激!

添加一个 message 语句,这样当 R 启动时我们可以验证 .Rprofile 实际上确实 运行。还可以使用 library 而不是 require,因为如果 library 失败时会立即给出错误,从而更容易调试。然后,不要将 png 放入全局环境,而是将其插入 grDevices 命名空间。为此,必须先将其解锁。

# This code goes in .Rprofile file
message("Hello")
library("Cairo")
unlockBinding("png", asNamespace("grDevices"))
utils::assignInNamespace("png", CairoPNG, "grDevices")

查看不同的方法:

How to run R on a server without X11, and avoid broken dependencies