2011-10-19 43 views
7

Tôi muốn lặp qua một chuỗi dài các ô qplots hoặc ggplot2, tạm dừng tại mỗi ô để tôi có thể kiểm tra nó trước khi tiếp tục.Lặp qua một loạt các ô mẫu

Các mã sau đây không tạo ra âm mưu:

library(ggplot2) 
par(ask=TRUE) 
for(Var in names(mtcars)) { 
    qplot(mtcars[,Var], wt, data=mtcars, xlab=Var) 
} 

nhưng nếu tôi chạy dòng này sau khi chạy vòng lặp, tôi không nhận được một âm mưu:

qplot(mtcars[,Var], wt, data=mtcars, xlab=Var) 

lý do cho hành vi này là gì? Làm cách nào để hiển thị các ô trong vòng lặp?

Theo dõi: Có cách nào thanh lịch hơn thông qua các biến hơn sử dụng mtcars[,Var]xlab=Var không?

+3

Hãy thử gọi 'qplot' của bạn bằng 'in'. Xem 7.22 Câu hỏi thường gặp về R. – James

Trả lời

10

Khi các câu trả lời khác đã cho biết, hãy quấn từng cuộc gọi qplot() trong print() (đây là R FAQ 7.22). Lý do tại sao là ggplot không được in đến thiết bị đồ họa cho đến khi print.ggplot được gọi trên chúng. print() là một hàm chung gửi đến print.ggplot phía sau hậu trường.

Khi bạn đang làm việc trong repl ("đọc-đánh giá-in vòng lặp", aka shell) giá trị trả về của dòng đầu vào trước đó được tự động in thông qua một cuộc gọi ngầm đến print(). Đó là lý do tại sao qplot(mtcars[,Var], wt, data=mtcars, xlab=Var) đang hoạt động cho bạn. Nó không có gì để làm với phạm vi hoặc vòng lặp for. Nếu bạn đặt đường đó ở bất kỳ nơi nào khác không trực tiếp quay lại repl, chẳng hạn như trong một hàm trả về một thứ khác, nó sẽ không làm gì cả.

+0

Cảm ơn, tôi đã sửa câu trả lời của mình. – ROLO

5

Thêm print:

library(ggplot2) 
par(ask=TRUE) 
for(Var in names(mtcars)) { 
    print(qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)) 
} 

Đối với một lời giải thích xem câu trả lời Tavis Rudd.

6

Gần đây tôi đã làm điều gì đó tương tự và nghĩ rằng tôi sẽ đề cập đến hai bit mã bổ sung đã giúp. Tôi bao gồm dòng này trong cho vòng lặp để làm R tạm dừng trong chốc lát (trong trường hợp này, nửa giây) sau khi in từng lô:

Sys.sleep(0.5) 

Ngoài ra, thay vì xem các lô trên màn hình, bạn có thể lưu chúng trực tiếp vào tệp và sau đó duyệt qua chúng khi bạn rảnh rỗi. Hoặc trong trường hợp của tôi, tôi đã cố gắng tạo hiệu ứng quỹ đạo của một con ong mà chúng tôi đang theo dõi, vì vậy tôi đã nhập chuỗi hình ảnh vào ImageJ và lưu nó dưới dạng gif động.

library(ggplot2) 
png(file="cars%d.png") 
for(Var in names(mtcars)) { 
print(qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)) 
} 
dev.off() 
Các vấn đề liên quan