Это хорошая идея, так как делает ее менее неловкой, но мне также любопытно, могу ли я вообще ее не показывать.

ли сохранить график, не отображая его вообще?

Я сделал немногоggplot взломать, чтобы иметь возможность копировать графики вpowerpoint легко, он копирует сюжет в буфер обмена, но можно увидеть, как быстро открываются и закрываются окна устройства, это немного неловко, я могу избежать этого?

я используюwindows а такжеrstudio.

воспроизводимый код:

library(ggplot)

`-.gg` <- function(e1,e2){
  assertthat::assert_that(is.numeric(e2),
                          length(e2)<= 2)
  if(identical(e2,0)) return(invisible(NULL))
  W <- 8
  H <- 4.5
  dev.new(width=W * head(e2,1), height=H * tail(e2,1),noRStudioGD =TRUE)
  print(e1)
  savePlot("clipboard", type="wmf")
  dev.off()
  e1
}

ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point() - 1 - 0

Редактировать:

В моем коде и выбранном решении есть проблемы, связанные с полупрозрачностью. В большинстве случаев это нормально, но исключения будут раздражать. Может быть, путь к общему решению будет сохранить его сtempfile затем прочитайте его в буфер обмена, либо с помощью соответствующей функции R, либо с помощью командной строки, используяsystem (может быть, что-то, что откроет файл невидимо и скопировать).

Ответы на вопрос(2)

На окнах иR 3.4.2, с помощьюSys.sleep смог посмотреть сюжет вместо моргания

`-.gg` <- function(e1,e2){
    assertthat::assert_that(is.numeric(e2),
                      length(e2)<= 2)
    if(identical(e2,0)) return(invisible(NULL))
     W <- 8
     H <- 4.5
    dev.new(width=W * head(e2,1), height=H * tail(e2,1),noRStudioGD =TRUE)
    print(e1)
    savePlot("clipboard", type="wmf")
    Sys.sleep(3) ##
    dev.off()
    e1
 }

ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point() - 1 - 0
 Moody_Mudskipper10 нояб. 2017 г., 12:28
Это хорошая идея, так как делает ее менее неловкой, но мне также любопытно, могу ли я вообще ее не показывать.
Решение Вопроса

Это работает в Windows: используйтеwin.metafile() устройство. Если вы не укажете имя файла, оно будет сохранено в буфер обмена. Так что ваша функция должна быть

library(ggplot2)

`-.gg` <- function(e1,e2){
  assertthat::assert_that(is.numeric(e2),
                          length(e2)<= 2)
  if(identical(e2,0)) return(invisible(NULL))
  W <- 8
  H <- 4.5
  win.metafile(width=W * head(e2,1), height=H * tail(e2,1))
  print(e1)
  dev.off()
  e1
}

ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point() - 1 - 0
 Moody_Mudskipper12 нояб. 2017 г., 15:27
Я был слишком хорош, чтобы быть правдой,ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_smooth() - 1 - 0 возвращаетсяsemi-transparency is not supported on this device. geom_smooth не будет работать полностью, но, похоже,alpha Параметр поддерживается.
 Moody_Mudskipper12 нояб. 2017 г., 15:35
лучший пример:ggplot(iris,aes(Sepal.Length,Sepal.Width)) + geom_smooth() - 1 - 0
 user255433012 нояб. 2017 г., 15:43
Я получаю то же предупреждение от вашего оригиналаsavePlot код. Это ограничение устройства WMF. Возможно, формат WMF сейчас поддерживает прозрачность, но устройство этого не знает.
 Moody_Mudskipper10 нояб. 2017 г., 17:05
Отлично! Огромное спасибо

Ваш ответ на вопрос