为什么 dev.new() 打开 RStudioGD- 和 png 设备?

Why does dev.new() open RStudioGD- and png device?

我需要了解“设备的工作原理”并遵循 great answer here 并且预计 dev.new() 只会创建一个新的默认设备。但这不会发生:

getOption("device")
# [1] "RStudioGD"
dev.list()
# NULL
dev.cur()
# null device 
# 1 
dev.new()
# NULL
dev.list()
# RStudioGD       png ?? why also png ??
# 2         3 
dev.cur()
# RStudioGD 
# 2 

这种行为是故意的吗?我猜不是——为什么它只选择 png? (我之前尝试过使用设备和 png(),但找不到默认参数更改。


在第一个答案之后,我还尝试 dev.new() 使用 RGui (Windows, x64)。还有一种行为:

> dev.new()
# opens a graphics window
> dev.list()
# windows 
#   2 
> getOption("device") # Just the function?
function (width, height, pointsize, record, rescale, xpinch, 
    ypinch, bg, canvas, gamma, xpos, ypos, buffered, title, restoreConsole, 
    clickToConfirm, fillOddEven, family = "", antialias) 
{
    check <- Sys.getenv("_R_CHECK_SCREEN_DEVICE_", "")
    msg <- "screen devices should not be used in examples etc"
    if (identical(check, "stop")) 
        stop(msg, domain = NA)
    else if (identical(check, "warn")) 
        warning(msg, immediate. = TRUE, noBreaks. = TRUE, domain = NA)
    new <- list()
    if (!missing(width)) 
        new$width <- as.double(width)
    if (!missing(height)) 
        new$height <- as.double(height)
    if (!missing(pointsize)) 
        new$pointsize <- as.double(pointsize)
    if (!missing(record)) 
        new$record <- record
    if (!missing(rescale)) 
        new$rescale <- rescale
    if (!missing(xpinch)) 
        new$xpinch <- as.double(xpinch)
    if (!missing(ypinch)) 
        new$ypinch <- as.double(ypinch)
    if (!missing(bg)) 
        new$bg <- bg
    if (!missing(canvas)) 
        new$canvas <- canvas
    if (!missing(gamma)) 
        new$gamma <- gamma
    if (!missing(xpos)) 
        new$xpos <- as.integer(xpos)
    if (!missing(ypos)) 
        new$ypos <- as.integer(ypos)
    if (!missing(buffered)) 
        new$buffered <- buffered
    if (!missing(title)) 
        new$title <- title
    if (!missing(restoreConsole)) 
        new$restoreConsole <- restoreConsole
    if (!missing(clickToConfirm)) 
        new$clickToConfirm <- clickToConfirm
    if (!missing(fillOddEven)) 
        new$fillOddEven <- fillOddEven
    if (!missing(antialias)) 
        new$antialias <- match.arg(antialias, aa.win)
    d <- check.options(new = new, envir = .WindowsEnv, name.opt = ".Windows.Options", 
        reset = FALSE, assign.opt = FALSE)
    rescale <- match(d$rescale, c("R", "fit", "fixed"))
    if (is.na(rescale)) 
        stop("invalid value for 'rescale'")
    antialias <- pmatch(d$antialias, aa.win)
    invisible(.External(C_devga, "", d$width, d$height, 
        d$pointsize, d$record, rescale, d$xpinch, d$ypinch, d$canvas, 
        d$gamma, d$xpos, d$ypos, d$buffered, .PSenv, d$bg, d$restoreConsole, 
        d$title, d$clickToConfirm, d$fillOddEven, family, antialias))
}
<bytecode: 0x0000000015978308>
<environment: namespace:grDevices>

dev.***

简介

Windows 默认情况下,我们在 dev.new

之后有两个图形设备
dev.list()
NULL
dev.cur()
null device 
          1 
dev.new()
NULL
dev.list()
RStudioGD       png 
        2         3 

我们还可以添加哪些图形设备:

a) 弹出窗口 window(MacOS 上 "quartz",Linux 上 "X11"。);

windows()
dev.list()
RStudioGD       png   windows 
        2         3         4  

b) pdf;

pdf()
dev.list()
RStudioGD       png       pdf 
        2         3         4 

c) png, svg, tiff, jpeg.

png()
svg()
tiff()
jpeg()
dev.list()
RStudioGD       png       pdf       png       svg      tiff      jpeg 
        2         3         4         5         6         7         8 

要进行图形输出:

dev.set(5)
png 
  5 
  ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy))
dev.off()

在此之后生成了一个包含我们绘图的文件,但是“png”图形输出从我们的 dev.list

中消失了
dev.list()
pdf  svg tiff 
  4    6    7    

我们可以使用 dev.next() and dev.prev()

在图形设备之间移动

要关闭我们使用的所有图形设备graphics.off()

graphics.off()
dev.list()
NULL