检测R表达式是否需要图形设备

时间:2016-11-24 11:42:06

标签: r

有两个通用表达式......(只是示例)......

e1 <- expression({sin(x)})        # does not need gr. device
e2 <- expression({curve(sin(x))}) # needs gr. device

检测e2需要gr的最佳方式是什么?设备提前eval(e2)

类似detectNeedsGr(e2),返回TRUEdetectNeedsGr(e1),返回FALSE,它应该可以在非交互模式下工作。

到目前为止,我可以想象解析all.names(e2) ......,相当不方便。

更多详情

  1. 每个表达式都将在工作流程中进行评估
  2. 表达需要gr的表现。工作流程中需要 之前来调整工作流程详细信息,而不是在eval之后(显然在eval之后每个人都知道)
  3. 表达式不是任意的,它们来自众所周知的定义
  4. 可以在逻辑选项中添加特定表达式是否会产生gr。输出,但它是过度的,我想避免这种情况,并以编程方式找出它。
  5. 我可以设计工作流程以使用之后的eval 逻辑,但它会带来我想要避免的步骤,并基于我指定的问题。
  6. 不是设备功能等问题。
  7. 在这种情况下,工作流程将被整合到闪亮的应用程序中,但通常无关紧要。

1 个答案:

答案 0 :(得分:1)

最简单的方法是确保您始终拥有可用的图形设备:

grcap <- any(capabilities()[c("X11", "aqua")])
win <- .Platform$OS.type == "Windows"
inter <- interactive()
if(!(grcap || (win && inter)))
{
    filename <- paste0(tempfile(), "%03d.jpg")
    jpeg(filename)
}

这将检查您的脚本是否在具有图形功能的会话中运行。如果没有,任何图将被发送到临时目录中的jpg文件,并在关闭R时删除。