Đặt lại mệnh giá thành các giá trị mặc định khi khởi động


77

Thông thường khi tôi tạo các hàm cốt truyện của riêng mình, tôi tạo một cấu trúc:

op <- par("mypar"=myvalue)
on.exit(par(op))

là cách tiêu chuẩn để hoàn nguyên parvề các giá trị trước đó. Hãy tưởng tượng bạn đang chạy một số chức năng đã thay đổi một số phân tích cú pháp và bạn cần đặt lại về giá trị mặc định khi khởi động trong R. Cách thuận tiện để làm như vậy là gì?

Hay nói cách khác: làm thế nào để một người đạt được các giá trị mặc định par()?


5
Tôi có ấn tượng rằng mỗi khi một thiết bị đồ họa mới được khởi động, nó vẫn được cung cấp các giá trị mặc định.
James

3
@James Họ làm được, nhưng tôi nghĩ lực đẩy của @Joris Q là, có cách nào để đặt lại trình phân tích cú pháp cho thiết bị hiện tại nếu người ta chưa lưu các giá trị mặc định. Nói cách khác, làm cách nào để xác định bộ phân tích cú pháp mặc định cho một thiết bị, không phải bộ phân tích cú pháp hiện tại.
Gavin Simpson

7
@Gavin Simpson Ah ok, nhưng dev.new()dev.off()có thể được sử dụng sau đó
James

1
@James Thật vậy; Tôi nói điều này với @Joris trong phòng chat tag R, nhưng chúng tôi muốn có một giải pháp ít hacky :-)
Gavin Simpson

Câu trả lời:


90

Mỗi khi một thiết bị mới được mở, par () sẽ đặt lại, vì vậy một tùy chọn khác chỉ cần thực hiện dev.off()và tiếp tục.


5
Trong số tất cả các câu trả lời được cung cấp, đây là câu trả lời duy nhất thực sự trả lời câu hỏi được hỏi.
gent

6
@DarkHalo sẽ không phải là một lựa chọn tồi nếu chúng ta có nhiều ô trong một bản pdf? vì điều này sẽ đóng pdfđiện thoại và như vậy sẽ không thể có nhiều lô trong một pdf đơn
joel.wilson

51

Đây là hacky, nhưng:

resetPar <- function() {
    dev.new()
    op <- par(no.readonly = TRUE)
    dev.off()
    op
}

hoạt động theo mốt, nhưng nó tạm thời flash một thiết bị mới trên màn hình ...

Ví dụ:

> par(mfrow = c(2,2)) ## some random par change
> par("mfrow")
[1] 2 2
> par(resetPar())     ## reset the pars to defaults
> par("mfrow")        ## back to default
[1] 1 1

3
Nó có thể được an toàn hơn để tránh cố gắng mục reset mà có thể đã được thay đổi bằng cách thay đổi kích thước như mai, mar, pin, plt và pty (như là cảnh báo trong trang trợ giúp mệnh.)
IRTFM

2
Một ý tưởng tương tự đã được thảo luận trên R-help: tolstoy.newcastle.edu.au/R/e2/help/07/09/26665.html
Aaron rời khỏi Stack Overflow

Không tìm thấy bất cứ điều gì khác, vì vậy sẽ phải làm điều đó.
Joris Meys

1
Tôi nhận được thông báo lỗi sau 'Thông báo cảnh báo: Trong (function (): Chỉ cho phép một thiết bị đồ họa RStudio'
hlm

3
@hlm Khó quá; chỉ có thể có một thiết bị như vậy và vì R không lưu trữ các giá trị mặc định nên bây giờ có cách dễ dàng để lấy chúng. Hỏi những người RStudio về điều này. Ngoài ra, không thay đổi par()mà không lưu trữ các giá trị mặc định. Hoặc sắp xếp các giá trị mặc định được lấy khi khởi động thông qua của bạn .Rprofile.
Gavin Simpson

15

Từ Quick-R

par()              # view current settings
opar <- par()      # make a copy of current settings
par(col.lab="red") # red x and y labels 
hist(mtcars$mpg)   # create a plot with these new settings 
par(opar)          # restore original settings

13
Tôi biết điều đó, nhưng nó không khôi phục các giá trị mặc định nếu bạn đã thay đổi chúng trước đó. par () hiển thị cài đặt hiện tại, không phải cài đặt mặc định.
Joris Meys

4
Giải pháp này có thể không hoạt động trong trường hợp này nhưng hãy để nó ở đây như một cách tiếp cận không hoạt động.
Anusha

4

Một giải pháp thay thế để ngăn chặn các chức năng thay đổi người dùng par. Bạn có thể thiết lập sớm các tham số mặc định trên hàm để các tham số và bố cục đồ họa sẽ không bị thay đổi trong quá trình thực thi hàm. Xem ?on.exitđể biết thêm chi tiết.

on.exit(layout(1))
opar<-par(no.readonly=TRUE)
on.exit(par(opar),add=TRUE,after=FALSE)

1

Sử dụng tập lệnh dưới đây để quay lại 1 cốt truyện bình thường:

par(mfrow = c(1,1))

1

dev.off () là hàm tốt nhất, nhưng nó cũng xóa tất cả các âm mưu. Nếu bạn muốn giữ các ô trong cửa sổ của mình, ngay từ đầu hãy lưu cài đặt mệnh giá mặc định:

def.par = par ()

Sau đó, khi bạn sử dụng các chức năng mệnh giá của mình, bạn vẫn có một bản sao lưu các cài đặt mệnh giá mặc định. Sau đó, sau khi tạo các lô, hãy kết thúc với:

par (def.par) # quay lại cài đặt par mặc định

Với điều này, bạn giữ các lô đã tạo và đặt lại cài đặt mệnh.


2
Hãy lưu ý rằng một số tham số đồ họa ở chế độ chỉ đọc và do đó không thể đặt lại. Vì vậy, ban đầu gọi chăn để parđược thực hiện tốt nhất như par(no.readonly = TRUE).
BroVic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.