Как предотвратить создание Rplots.pdf?

Я работаю с некоторым кодом R, который генерирует несколько изображений в виде файлов png; однако файл Rplots.pdf продолжает создаваться в рабочем каталоге, есть ли способ предотвратить это?

library(Cairo)
CairoPNG(file = "graphs.png")
nf <- layout(matrix(c(1:8), 2, 4, byrow=T), c(1, 1), c(1, 1, 1, 1), TRUE)
for (k in 1:num.k) {
    plotMatrix(connect.matrix.ordered[k,,], log = F, main = paste("k=", k.vector[k]), sub = paste("Cophenetic coef.=", rho[k]), ylab = "samples", xlab ="samples")
}
y.range <- c(1 - 2*(1 - min(rho)), 1)
plot(k.vector, rho, main ="Cophenetic Coefficient", xlim=c(k.init, k.final), ylim=y.range, xlab = "k", ylab="Cophenetic correlation", type = "n")
lines(k.vector, rho, type = "l", col = "black")
points(k.vector, rho, pch=22, type = "p", cex = 1.25, bg = "black", col = "black")
dev.off()

person rjzii    schedule 30.06.2011    source источник
comment
Вы имели в виду Rplots.png?? Я не понимаю, как ответ @Andrie остановит создание устройства PDF, но вижу, что это решение, если вы действительно имеете в виду Rplots.png???   -  person Gavin Simpson    schedule 30.06.2011
comment
@Gavin Simpson - Закройте, теперь есть файл Rplot001.png, который создается и не очищается.   -  person rjzii    schedule 30.06.2011
comment
Я не могу воспроизвести вашу проблему (отчасти потому, что ваш пример не является самодостаточным). Создает ли что-то более простое, подобное следующему, мошеннический файл? library(Cairo); CairoPNG(file = "graphs.png"); layout(matrix(c(1:4), 2)); for (k in 1:4) plot(1,k); dev.off()   -  person Aaron left Stack Overflow    schedule 01.07.2011
comment
@ Аарон - Я тоже еще не уверен. Код в значительной степени недокументирован, и многие из них связаны с построением диаграмм, которые нам больше не нужны. Возможно, мне придется снова обновить вопрос, как только я очистю еще немного кода.   -  person rjzii    schedule 01.07.2011
comment
Звучит как большая вероятность того, что есть какой-то код, который открывает устройство без предварительного открытия файла, как в моем ответе.   -  person Aaron left Stack Overflow    schedule 01.07.2011


Ответы (4)


Интересно, есть ли у вас другая команда, которая открывает устройство до или после фрагмента кода, который вы нам дали. Когда вы закончите, запустите dev.cur(), чтобы проверить, не осталось ли открытое устройство. Если нет, он должен вернуть нулевое устройство.

Вот способы, которыми вы можете воссоздать получение Rplots.pdf или Rplot001.png; команды layout и par открывают устройство, если оно не открыто, и, поскольку имя файла не указано, используется имя файла по умолчанию.

options(device="pdf")
layout(1:4)
dev.off()

options(device="png")
par()
dev.off()

Возможно, увидев это, вы поймете, что происходит с вашим кодом.

person Aaron left Stack Overflow    schedule 01.07.2011
comment
Это оказалось проблемой - сюжет генерировался без открытия файла для него. Однако очень неясное место в коде. - person rjzii; 13.07.2011

Я знаю, что это очень старый пост, и, конечно же, ОП решил это. Но я столкнулся с подобной ситуацией, работая с plotly. Преобразование вывода ggplot в вывод графика вызвало аналогичную ошибку невозможности открыть файл «Rplots.pdf».

Я решил это, просто включив:

pdf(NULL)

Я не уверен в причине ошибки, не смог понять это, но эта небольшая строка помогла устранить ошибку и отобразить мои графики, как я и ожидал, в комбинациях plotly и ggplot.

person Syamanthaka    schedule 27.07.2016
comment
Отличный совет, @Syamanthaka. Это давно меня бесило. Но я обнаружил, что хотя pdf(NULL) подавляет создание Rplots.pdf при запуске R в пакетном режиме, но также подавляет отображение окна Plots в RStudio, если pdf(NULL) запускается до отображения там любого графика. Вы можете избежать проблемы с RStudio, используя if(!interactive()) pdf(NULL) в верхней части программы, которую вы можете запускать в пакетном режиме или в интерактивном режиме. - person user3799203; 15.06.2021
comment
Согласно документации base::options , похоже, что переменные среды R_INTERACTIVE_DEVICE и R_DEFAULT_DEVICE также могут использоваться для решения этой проблемы. - person user3799203; 15.06.2021

Вот исходный код для CairoPNG:

function (filename = "Rplot%03d.png", width = 480, height = 480, 
    pointsize = 12, bg = "white", res = NA, ...) 
{
    Cairo(width, height, type = "png", file = filename, pointsize = pointsize, 
        bg = bg, ...)
}

Это говорит вам, что CairoPNG принимает filename=... в качестве параметра и передает его в Cairo в качестве параметра file.

Я понимаю, как это может привести к путанице, но дело в том, что ваш вызов CairoPNG должен быть:

CairoPNG(filename="graphs.png")

Посмотрите, работает ли это...

person Andrie    schedule 30.06.2011
comment
Это имеет большое значение для решения проблемы, но похоже, что options(device = "png") также необходим для правильной работы. - person rjzii; 30.06.2011
comment
Сделал еще немного проверки, и когда options(device = "png") находится в файле Rplot001.png, генерируется, аналогично, если он выключен, генерируется Rplots.pdf. Любые идеи, что может происходить? Файл Rplot001.png содержит действительные данные из сводного отчета. - person rjzii; 30.06.2011
comment
Простите, нет. Я никогда не использовал Cairo. :-( - person Andrie; 01.07.2011

Недавно у меня была аналогичная проблема после обновления до R-3.0.3 (да, мы немного отстали!). Оказывается, теперь palette("default") открывает устройство, хотя раньше этого не было.

person David Brahm    schedule 29.07.2016