2013-07-05 30 views
8

Điều này có thể đơn giản, nhưng tôi vẫn cảm thấy thất vọng, vì vậy tôi sẽ đánh giá cao một số giải thích nhanh. Tôi đã tìm kiếm một câu trả lời đúng đắn, nhưng dường như không thể tìm ra câu trả lời.Sự khác biệt giữa .Rprofile và .First

Kể từ khi .Rprofile của tôi bao gồm tất cả các lệnh mà tôi cần chạy mỗi khi tôi mở Rstudio (hoặc R nói chung), tại sao tôi có tùy chọn để xác định hàm .First() trong .Rprofile? Nó thực sự là mục đích của.()?

Để đưa ra một ví dụ, giả sử rằng .Rprofile của tôi có những dòng sau:

.First <- function(){ 
    library(xts) 
    cat("\nWelcome at", date(), "\n") 
} 

Làm thế nào khác nhau là trên từ đơn giản có trong .Rprofile của tôi theo dòng:

library(xts) 
cat("\nWelcome at", date(), "\n") 

Tôi có đã thử cả hai và họ có cùng kết quả.

Cảm ơn!

Trả lời

12

Sự khác biệt chính là .First được thực hiện sau khi mặc định không gian làm việc ảnh .Rdata (nếu nó tồn tại) được tải, và do đó có quyền truy cập vào các đối tượng trong không gian làm việc đó.

Ví dụ, chúng ta hãy tạo ra một đối tượng mà sẽ được tự động nạp khi khởi động:

x <- 2 
save.image() 

Quit R, và tạo ra một .RProfile trong thư mục làm việc mặc định của bạn có chứa:

y <- try(print(x)) 
print(y) 
.First <- function() 
{ 
    print(x) 
    invisible(NULL) 
} 

Các nỗ lực đầu tiên để in x sẽ không thành công, nhưng điều thứ hai sẽ thành công.

+0

Tuyệt vời. Cảm ơn nhiều! –

+0

Người ta phải nhận thấy rằng hành vi này có thể rất có vấn đề bởi vì ** Đầu tiên có khả năng bị xóa ** bởi phiên bản trước của hàm khi không gian làm việc được tải. Bạn nên tải lại không gian làm việc một cách cụ thể, xóa .Fisrt và khởi động lại phiên (bằng cách lưu không gian làm việc) –

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