2012-03-16 35 views
14

Tôi đang phát triển bản nâng cấp lớn cho gói R, và là một phần của những thay đổi mà tôi muốn bắt đầu sử dụng các phương pháp S3 để tôi có thể sử dụng các hàm tổng hợp, tóm tắt và in. Nhưng tôi nghĩ rằng tôi không hoàn toàn chắc chắn rằng tôi hiểu tại sao và khi nào nên sử dụng các chức năng chung chung.Sử dụng các chức năng chung của R, khi nào và tại sao?

Ví dụ: tôi hiện có chức năng gọi là logLikSSM, tính toán khả năng đăng nhập của mô hình không gian trạng thái. Thay vì sử dụng các hàm này, tôi có thể tạo hàm logLik.SSM hoặc một cái gì đó tương tự, vì có hàm logLik chung trong R. Lợi ích của việc này sẽ là logLik viết ngắn hơn logLikSSM, nhưng thực sự có bất kỳ điểm nào khác trong điều này?

Trường hợp tương tự, có một hàm chung được gọi là mô phỏng trong gói thống kê, vì vậy trong lý thuyết tôi có thể sử dụng thay vì simulateSSM. Nhưng bây giờ mô tả hàm mô phỏng cho biết hàm này được sử dụng để "Mô phỏng hồi đáp", nhưng hàm của tôi thực sự mô phỏng các trạng thái ẩn, vì vậy nó thực sự không phù hợp với mô tả của hàm mô phỏng. Vì vậy, có lẽ trong trường hợp này tôi không nên sử dụng chức năng chung phải không?

Tôi xin lỗi nếu câu hỏi này quá mơ hồ ở đây.

Trả lời

10

Các lợi thế của việc tạo ra các phương pháp để generics từ cốt lõi của R bao gồm:

  1. Dễ sử dụng. Người dùng gói của bạn đã quen thuộc với các generics đó sẽ ít nhớ đến việc sử dụng gói của bạn dễ dàng hơn. Họ thậm chí có thể làm một số tiền nhất định mà không cần đọc tài liệu. Nếu bạn nghĩ ra tên riêng của mình thì họ phải khám phá và ghi nhớ những cái tên mới, đó là một gánh nặng nhận thức được thêm vào.

  2. Tận dụng chức năng hiện tại. Ngoài ra bất kỳ chức năng khác mà làm cho việc sử dụng generics bạn tạo ra phương pháp cho sau đó có thể tự động sử dụng của bạn là tốt; nếu không, họ sẽ phải thay đổi. Ví dụ: AIC sử dụng logLik.

Một bất lợi là chung liên quan đến việc cấp thêm công văn và nếu logLik là trong vòng lặp bên trong của một tối ưu hóa có thể có một tác động (mặc dù có thể không nguyên liệu). Trong trường hợp đó, bạn có thể kiểm tra hiệu suất của việc gọi generic và gọi phương thức trực tiếp và sử dụng phương thức sau nếu nó tạo ra sự khác biệt đáng kể.

Về trường hợp chức năng của bạn có mục đích hoàn toàn khác với mục đích chung trong lõi của R, thì có thể khó hiểu hơn là hữu ích để bạn có thể tạo phương thức nhưng có tên hàm của riêng bạn .

Bạn có thể muốn đọc số zoo Design manual (xem liên kết tới zoo Design bên dưới Họa tiết gần cuối trang đó) để thảo luận về ý tưởng thiết kế đi vào gói sở thú. Chúng bao gồm ý tưởng đang được thảo luận ở đây.

EDIT: Đã thêm các điểm bất lợi.

+0

Cảm ơn, tôi đã nghĩ về lợi thế đầu tiên, nhưng tôi đã bỏ lỡ điểm thứ hai. Điểm tốt về tối ưu hóa và logLik, phải kiểm tra điều đó.Tôi cũng sẽ kiểm tra sổ tay sở thú. –

4

câu hỏi hay.

Tôi sẽ chia Câu hỏi của bạn thành hai phần; đây là lần đầu tiên:

i] s có thực sự có bất kỳ điểm nào khác trong [thực hiện các chức năng chung] không?

Vâng, mô hình này thường được gọi khi Develper không biết các lớp đối tượng cho mọi đối tượng ông/bà mong một người sử dụng để vượt qua trong với phương pháp đang được xem xét.

Và vì không chắc chắn này, mô hình này thiết kế (được gọi là quá tải trong nhiều ngôn ngữ khác) được invokved, và đòi hỏi R để đánh giá các lớp đối tượng, sau đó cử rằng phản đối phương pháp thích hợp cho các loại đối tượng.

Các thứ hai phần của Câu hỏi của bạn: [i] n trường hợp này tôi không nên sử dụng [một hàm tổng quát] phải không?

Để cố gắng cung cấp cho bạn một câu trả lời hữu ích hơn các chi tiết của câu hỏi của bạn, hãy xem xét những gì xảy ra với phương pháp ban đầu khi bạn gọi setGeneric, đi qua phương pháp mà trong.

các cơ quan chức năng ban đầu được thay thế Điều này thay thế phần thân hàm ban đầu, chỉ trượt xuống một mức để nó trở thành phương thức mặc định mà hàm cấp cao nhất (chung) gửi đến.

showMethods() sẽ cho phép bạn xem tất cả các phương thức được gọi bởi hàm gửi mới được tạo (hàm chung).

+0

Cảm ơn bạn, điều này làm cho tôi hiểu rõ hơn lý do đằng sau các generics. –

0

Và bây giờ cho một bất lợi rất lớn:

Dễ lạm dụng: Người sử dụng gói của bạn đã quen thuộc với những Generics có thể làm một số tiền nhất định mà không đọc tài liệu.

Và trong đó có sự sai lầm rằng các thành phần, các đối tượng tái sử dụng, dịch vụ, vv là một thuốc chữa bách bệnh dễ dàng cho tất cả các thách thức về phần mềm.

Và lý do tại sao phần lớn phần mềm bị lỗi, cồng kềnh và hoạt động không nhất quán với hy vọng nhỏ về hỗ trợ kỹ thuật có thể chẩn đoán sự cố của bạn.

Có một lý do để liên kết tĩnh và thực thi nhỏ trở lại trong ngày. Nhưng thế hệ mã này bây giờ, được trả tiền ngay bây giờ, gỡ lỗi sau này, trước khi sa thải/IPO đến, không có ký ức về những ngày khi mã thực sự hoạt động rất đáng tin cậy và cài đặt/tích hợp không yêu cầu 200 $/giờ hoặc tin tặc đã dành một tuần cố gắng để có được một số sản phẩm nguồn mở "đơn giản" được cài đặt và hoạt động hiệu quả.

Nhưng nếu bạn muốn tiếp tục truyền thống viết tên hàm/phương thức ngắn hơn, hãy là khách của tôi.

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