2011-06-30 32 views
10

Tôi đang làm việc với một số mã R tạo ra một số hình ảnh dưới dạng tệp png; Tuy nhiên, một tập tin Rplots.pdf tiếp tục được tạo ra trong thư mục làm việc, có cách nào để ngăn chặn điều này xảy ra không?Làm cách nào để ngăn Rplots.pdf được tạo ra?

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() 
+0

Ý của bạn là 'Rplots.png' ?? Tôi không thể thấy cách câu trả lời của @ Andrie sẽ ngăn chặn một thiết bị PDF được tạo ra, nhưng có thể thấy nó là một giải pháp nếu bạn thực sự có nghĩa là 'Rplots.png' ??? –

+0

@Gavin Simpson - Đóng, bây giờ có một tập tin 'Rplot001.png' đang được tạo và không được làm sạch. – rjzii

+0

Tôi không thể tái tạo vấn đề của bạn (một phần vì ví dụ của bạn không tự chứa). Có một cái gì đó đơn giản như sau cũng sản xuất các tập tin giả mạo? 'thư viện (Cairo); CairoPNG (tệp = "graphs.png"); bố cục (ma trận (c (1: 4), 2)); cho (k trong 1: 4) lô (1, k); dev.off() ' – Aaron

Trả lời

9

Tôi tự hỏi nếu bạn có một lệnh mở một thiết bị trước hoặc sau đoạn mã bạn đã cho chúng tôi. Khi bạn đã hoàn tất, hãy chạy dev.cur() để xem có thiết bị nào còn mở không. Nếu không, nó sẽ trả về thiết bị null.

Dưới đây là các cách bạn có thể tạo lại một số Rplots.pdf hoặc Rplot001.png; các lệnh layoutpar mở một thiết bị nếu thiết bị không mở và do không có tên tệp nào, nó sử dụng tên tệp mặc định.

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

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

Có thể thấy điều đó xảy ra ở đây sẽ cung cấp cho bạn manh mối về những gì đang xảy ra với mã của bạn.

+1

Điều này đã kết thúc là vấn đề - một cốt truyện được tạo ra mà không có tệp đang được mở cho nó. Rất ít vị trí trong mã mặc dù. – rjzii

2

Đây là mã nguồn cho 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, ...) 
} 

này nói với bạn rằng CairoPNG mất filename=... như một tham số, và chuyển này để Cairo như tham số file.

tôi có thể xem cách này có thể dẫn đến sự nhầm lẫn, nhưng điểm là cuộc gọi của bạn để CairoPNG nên là:

CairoPNG(filename="graphs.png") 

Xem nếu mà làm việc ...

+0

Điều đó đi một chặng đường dài để giải quyết vấn đề, nhưng có vẻ như 'các tùy chọn (device =" png ")' cũng là cần thiết để có được những thứ chạy một cách chính xác. – rjzii

+0

Đã thực hiện một số kiểm tra và khi 'tùy chọn (thiết bị =" png ")' trên tệp 'Rplot001.png' được tạo ra, tương tự như vậy, nếu nó được tắt' Rplots.pdf' được tạo ra. Bất kỳ ý tưởng gì có thể xảy ra? Tệp 'Rplot001.png' có dữ liệu hợp lệ trong tệp đó từ báo cáo tổng hợp. – rjzii

+0

Xin lỗi, không. Tôi chưa bao giờ sử dụng 'Cairo'. :-( – Andrie

3

Tôi biết đây là một bài đăng rất cũ và chắc chắn OP đã giải quyết vấn đề này. Nhưng tôi đã gặp phải tình huống tương tự này trong khi làm việc với cốt truyện. Chuyển đổi đầu ra ggplot thành đầu ra sơ đồ tạo ra lỗi tương tự khi không thể mở tệp 'Rplots.pdf'.

Tôi giải quyết nó bằng cách đơn giản bao gồm:

pdf(NULL) 

Tôi không chắc chắn về lý do cho các lỗi, đã không thể để con số đó ra, nhưng dòng nhỏ này giúp loại bỏ các lỗi và hiển thị của tôi âm mưu như tôi mong đợi trong các kết hợp cốt lõi và ggplot.

0

Tôi đã gặp sự cố tương tự gần đây sau khi nâng cấp lên R-3.0.3 (vâng chúng tôi hơi chậm một chút!). Nó chỉ ra rằng bảng ("mặc định") mở một thiết bị ngay bây giờ, mặc dù nó không được sử dụng để.

Các vấn đề liên quan