2011-08-28 18 views
10

Tôi muốn để có thể source() một tập tin trong đó bao gồm một tập tin khác nhau trong cùng một thư mục của nó, nhưng tôi không muốn phải thiết lập các thư mục làm việc kể từ R-nhắc trước khi chạy tập tin này:Xác định vị trí của tệp hiện tại trong R để bao gồm tệp từ cùng một thư mục?

> getwd() 
[1] "/Users/myser" 
> source("/Users/myuser/workspace/myproject/myfile.r") 

Bên trong/Người dùng/myuser/không gian làm việc/myproject, sẽ có myfile.r và my-utils.r. myfile.r gọi source('my-utils.r') từ bên trong.

Các ngôn ngữ lập trình khác có thể xác định đường dẫn của tệp hiện tại. R có cái gì tương tự? Ví dụ:

cur_dir <- sys.get_current_file_path() 
source(file.path(cur_dir, "my-utils.r")) 

Trả lời

11
source("/Users/myuser/workspace/myproject/my-utils.r", chdir=TRUE) 

Khi chdir tùy chọn được thiết lập là true và tham số file nguồn là một đường dẫn đầy đủ, thư mục của tập tin sẽ được sử dụng như các thư mục làm việc trong khi nguồn tập tin.

LƯU Ý: cur_dir <- sys.get_current_file_path() không có ý nghĩa nhiều vì tên đường dẫn không phải là duy nhất.

+0

đánh bại 30 giây của tôi ... câu trả lời hay. –

+0

@Apprentice - tên chức năng của tôi có lẽ đã được chọn kém. Những gì tôi có nghĩa là một cái gì đó giống như mã Python này: os.path.realpath (\ _ \ _ file \ _ \ _) –

+1

Vấn đề với mã/giải pháp này là nó liên kết chức năng của lời gọi đó với 'nguồn' đến nó tồn tại trong thư mục cụ thể đó. Nó sẽ là tốt để có một giải pháp mà không phụ thuộc vào điều này, chẳng hạn như sẽ đạt được bằng cách tiếp cận mà dolan đã được chụp cho với ví dụ giả python lấy cảm hứng của mình. chính xác tôi nếu tôi đang thiếu một cái gì đó mặc dù. – metasoarous