我有一个函数,该函数返回某种类型的大型对象(复杂的列表结构), 显示给用户没有任何意义,因为它会使屏幕混乱。
returnsMuchStuff <- function() {
ret <- list(x=rnorm(170),y=rnorm(170))
class(ret) <- "MuchStuff"
return(ret)
}
但是我有一个绘图功能,可以在绘图中显示内容。所以我想 覆盖绘图功能,以便在函数返回时直接显示绘图:
print.MuchStuff <- function(stuff) {plot(stuff$x,stuff$y)}
returnsMuchStuff() # displays plot - if plot can be displayed
例如,如果我使用RStudio,这可以正常工作。 但是我也想使用不能直接查看图的终端服务器在命令行上为用户提供支持。 在这种情况下,默认输出可能是PDF文件。
然后,我想显示一条消息“ PDF文件/ path / to /使用图创建的文件”,因为否则用户看不到这里发生了什么。
是否可以某种方式检测用户是使用图形界面还是将输出绘制在文件中? 如果将其绘制在文件中,该如何获取路径?
我唯一发现的就是使用options("device")
。
但这会输出一个函数,我无法以编程方式从中提取此信息:
> options("device")
$device
function (file = if (onefile) "Rplots.pdf" else "Rplot%03d.pdf",width,height,onefile,family,title,fonts,version,paper,encoding,bg,fg,pointsize,pagecentre,colormodel,useDingbats,useKerning,fillOddEven,compress)
{
initPSandPDFfonts()
new <- list()
....
}