2012-11-19 25 views
31

Trong tài liệu hướng dẫn, R gợi ý rằng các file dữ liệu thô (không rdata cũng không RDA) nên được đặt trong inst/extdata/inst và thư mục extdata trong R Bao bì

Từ đoạn đầu tiên trong: http://cran.r-project.org/doc/manuals/R-exts.html#Data-in-packages

Các dữ liệu thư mục con là dành cho các tệp dữ liệu, hoặc được cung cấp thông qua tải chậm hoặc tải bằng cách sử dụng dữ liệu(). (Sự lựa chọn được thực hiện bởi trường 'LazyData' trong tệp DESCRIPTION: mặc định là không làm như vậy.) Nó không nên được sử dụng cho các tệp dữ liệu khác theo yêu cầu của gói, và quy ước đã lớn lên để sử dụng thư mục inst/extdata cho các tệp như vậy.

Vì vậy, tôi đã chuyển tất cả các dữ liệu thô của tôi vào thư mục này, nhưng khi tôi xây dựng và tải lại gói và sau đó cố gắng truy cập vào các dữ liệu trong một hàm với (ví dụ):

read.csv(file=paste(path.package("my_package"),"/inst/extdata/my_raw_data.csv",sep="")) 
# .path.package is now path.package in R 3.0+ 

Tôi nhận được lỗi "không thể mở tệp".

Tuy nhiên, có vẻ như có một thư mục có tên là /extdata trong thư mục gói với các tệp trong đó (sau xây dựng và cài đặt). Điều gì đang xảy ra với thư mục /inst?

Mọi thứ trong thư mục/inst có được đẩy vào gói / của gói không?

+0

Tất cả các thư mục trong thư mục/inst đều có vị trí riêng trong thư mục trên cùng của gói. Về cơ bản tất cả mọi thứ trong/inst kết thúc trong thư mục trên cùng để bất kỳ thư mục trong đó kết thúc như là thư mục riêng của họ. Nhưng đây chỉ là từ kinh nghiệm và tôi không thể tìm thấy bất cứ điều gì trong R exts giải thích rằng ... – Dason

+1

Tôi sẽ chỉ thêm rằng tôi thích file.path để tạo một đường dẫn đến một tập tin – Dason

Trả lời

21

Cả hai đều rất gần và về cơ bản đều có điều này. Một tài liệu tham khảo chính thức từ 'Viết R Extensions' là:

1.1.3 thư mục con Package

[...]

Nội dung của inst thư mục con sẽ được sao chép một cách đệ quy vào thư mục cài đặt . Thư mục con của inst không nên can thiệp với những người sử dụng bởi R (hiện tại, R, data, demo, exec, libs, man, help, htmlMeta, và phiên bản trước sử dụng latex, R-ex). Việc sao chép số inst xảy ra sau khi src được tạo để Makefile của bạn có thể tạo tệp được cài đặt. Trước R 2.12.2, các tệp đã được cài đặt trên nền tảng POSIX với quyền trong nguồn gói, vì vậy hãy cẩn thận để đảm bảo những điều này không quá hạn chế: R CMD build sẽ thực hiện các điều chỉnh phù hợp. Để loại trừ các tệp không được cài đặt, người ta có thể chỉ định một danh sách mẫu loại trừ trong tệp .Rinstignore trong thư mục nguồn cấp cao nhất . Các mẫu này phải giống như biểu thức thông thường của Perl (xem trợ giúp cho regexp trong R để biết chi tiết chính xác), một dòng trên mỗi dòng, để khớp (10) với đường dẫn tệp và thư mục, ví dụ: doc/.*[.]png$ sẽ loại trừ tất cả tệp PNG trong inst/doc dựa trên số máy lẻ (trường hợp thấp hơn).

+0

Cảm ơn vì điều này. Tôi đã đi mù cố gắng tìm kiếm "inst" trong tài liệu. –

44

Hữu ích hơn việc sử dụng file.path sẽ là sử dụng system.file. Khi gói của bạn đã được cài đặt, bạn có thể lấy tập tin của bạn như sau:

fpath <- system.file("extdata", "my_raw_data.csv", package="my_package") 

fpath bây giờ sẽ có đường dẫn tuyệt đối trên HD của bạn để các tập tin.

+2

+1 Hữu ích, cảm ơn bạn. –

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