2012-09-07 22 views
8

Tôi đang cố tạo một gói bằng R trong đó tôi đã tạo nhiều Lớp tùy chỉnh mới. Mỗi lớp là một tập tin khác nhau. Các lớp kế thừa từ một lớp cha và kế thừa các lớp khác.Liên kết nhiều tệp trong khi tạo một gói trong R

Trong khi chạy mã của tôi, tôi gọi mỗi người trong số họ như thế này

source("package/father.R") 
source("package/son.R") 
source("package/grandson.R")  

Định nghĩa đối với một số trong những phương pháp cần thiết cho lớp cháu nghĩa trong lớp Sơn. Tôi sử dụng package.sk() để gọi cho mỗi người trong số họ và tạo ra một gói và nó có vẻ làm việc tốt. Nhưng khi chạy R CMD Check (và khi cố gắng cài đặt vào R), nó ném một lỗi vì hàm cố gắng gọi các tập tin theo thứ tự bảng chữ cái và vì vậy tập tin grandson.R được gọi trước son.R và nó hiển thị và báo lỗi rằng các phương thức chưa được xác định. Nếu tôi đổi tên thành zgrandson.R, R gọi tệp đó là cuối cùng và mọi thứ dường như hoạt động tốt, nhưng điều này rõ ràng không phải là giải pháp cho vấn đề.

Tôi đã đọc hướng dẫn để tạo gói, nhưng tất cả chúng dường như đối phó với các trường hợp đơn giản mà không có kế thừa/gọi các tệp khác trong R. Hy vọng tôi đã tự làm rõ.

+0

làm việc tốt trên bài đăng đầu tiên. –

+2

"Nếu tôi đổi tên thành zgrandson.R, R gọi tệp đó là cuối cùng và mọi thứ dường như hoạt động tốt, nhưng điều này rõ ràng không phải là giải pháp cho vấn đề." Tại sao? Đây chính xác là giải pháp tôi sử dụng và nhiều giải pháp khác nữa (bắt đầu các tập lệnh đầu tiên với thứ gì đó như '00Classes.R'). –

+0

Đó là làm việc tốt, nhưng trông giống như một cách xấu xí/hackish để giải quyết vấn đề: D. Cảm ơn bạn đã cho tôi biết rằng những người khác đang sử dụng cách giải quyết này. Mặc dù tôi tự hỏi nếu vấn đề là với cấu trúc mã của tôi chính nó, như không ai trong số các kịch bản của lập trình viên tốt tôi đã đi qua dường như gọi các tập tin khác. –

Trả lời

5

Theo như tôi hiểu, bạn có thể sử dụng trường Collate trong tệp DESCRIPTION để kiểm soát điều này.

Trích dẫn từ Writing R Extensions manual:

lĩnh vực An ‘Đối chiếu’ có thể được sử dụng để kiểm soát trật tự collation cho các tập tin mã R trong một gói khi chúng được xử lý cho gói cài đặt. Mặc định là đối chiếu theo ngôn ngữ ‘C’. Nếu có, đặc tả collate phải liệt kê tất cả các tập tin mã R trong gói (lấy các thư mục con cụ thể cho hệ điều hành), xem Thư mục con gói) như một danh sách phân cách bằng trắng của tệp đường dẫn liên quan đến thư mục con R. Đường dẫn chứa khoảng trắng hoặc báo giá cần phải được trích dẫn. Trường đối chiếu dành riêng cho hệ điều hành (‘Collate.unix’ hoặc ‘Collate.windows’) sẽ được sử dụng thay vì ‘Collate’.

Vì vậy, bạn có thể chỉ định:

Collate: 
    father.r 
    son.R 
    grandson.r 

Hoặc đơn giản là đổi tên các tập tin trong một cách mà trật tự sắp xếp tự từ điển sẽ cho kết quả theo thứ tự đối chiếu đúng, như bạn đã nêu trong câu hỏi của bạn.


Nhưng cũng xem this answer bởi @DirkEddelbuettel về một câu hỏi tương tự.

+0

Câu trả lời hoàn hảo! Cảm ơn rất nhiều về câu trả lời cực nhanh :) –

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