Hướng dẫn về lập trình hướng đối tượng trong R [đã đóng]


15

Có hướng dẫn tốt về lập trình hướng đối tượng trong R không?

Sẽ thật tuyệt nếu bao gồm những điều sau đây:

  • làm thế nào để xác định một lớp;
  • sự khác biệt giữa các lớp S3 và S4;
  • quá tải toán tử (tôi muốn có thể viết a+bở đâu ablà các thể hiện của lớp tôi có trong đầu).

Câu trả lời:


10

Wiki của Hadley Wickham trên devtools là một nguồn tài nguyên tuyệt vời cho các thông tin cần thiết ở dạng súc tích. Tuy nhiên, nếu bạn muốn có một tài nguyên toàn diện, phần OOP của hướng dẫn sử dụng ngôn ngữ R có thể hữu ích. Tôi chắc chắn các thành viên có kinh nghiệm hơn sẽ có đề xuất tốt hơn.



4

" Advanced R " của Hadley Wickham có một số giới thiệu và tài liệu tham khảo rất hay. Tôi đang nhân rộng phần này để lập chỉ mục tốt hơn.

Chọn một hệ thống

Ba hệ thống OO là rất nhiều cho một ngôn ngữ, nhưng đối với hầu hết lập trình R, S3 là đủ. Trong R, bạn thường tạo các đối tượng và phương thức khá đơn giản cho các hàm chung có sẵn như print (), Tóm tắt () và âm mưu (). S3 rất phù hợp với nhiệm vụ này và phần lớn mã OO mà tôi đã viết trong R là S3. S3 hơi kỳ quặc, nhưng nó hoàn thành công việc với tối thiểu mã.

Nếu bạn đang tạo các hệ thống đối tượng phức tạp hơn, S4 có thể phù hợp hơn. Một ví dụ điển hình là gói Matrix của Douglas Bates và Martin Maechler. Nó được thiết kế để lưu trữ và tính toán hiệu quả với nhiều loại ma trận thưa thớt khác nhau. Kể từ phiên bản 1.1.3, nó định nghĩa 102 lớp và 20 hàm chung. Gói được viết tốt và được nhận xét tốt, và họa tiết đi kèm (họa tiết ("Intro2Matrix", gói = "Ma trận")) cung cấp một cái nhìn tổng quan tốt về cấu trúc của gói. S4 cũng được sử dụng rộng rãi bởi các gói Bioconductor, cần mô hình hóa mối tương quan phức tạp giữa các đối tượng sinh học. Bioconductor cung cấp nhiều tài nguyên tốt cho việc học S4. Nếu bạn đã thành thạo S3, S4 tương đối dễ nhận; các ý tưởng đều giống nhau,

Nếu bạn đã lập trình bằng ngôn ngữ OO chính thống, RC sẽ có vẻ rất tự nhiên. Nhưng bởi vì họ có thể giới thiệu các tác dụng phụ thông qua trạng thái đột biến, nên họ khó hiểu hơn. Ví dụ, khi bạn thường gọi f (a, b) trong R, bạn có thể giả sử rằng a và b sẽ không được sửa đổi. Nhưng nếu a và b là các đối tượng RC, chúng có thể được sửa đổi tại chỗ. Nói chung, khi sử dụng các đối tượng RC, bạn muốn giảm thiểu tác dụng phụ càng nhiều càng tốt và chỉ sử dụng chúng khi các trạng thái có thể thay đổi là hoàn toàn bắt buộc. Phần lớn các chức năng vẫn phải là chức năng, và không có tác dụng phụ. Điều này làm cho mã dễ hiểu hơn và dễ hiểu hơn đối với các lập trình viên R khác.

Ông tham khảo " Một hướng dẫn thực tế về lập trình S4 ".

Có một số tài nguyên thú vị khác nếu bạn theo dõi con trỏ của anh ấy.

John M. Chambers nói trong "Lập trình hướng đối tượng, lập trình chức năng và R" :

R cũng bị ảnh hưởng mạnh mẽ bởi các ý tưởng về lập trình chức năng và đặc biệt, bởi mong muốn kết hợp chức năng với lập trình hướng đối tượng

Sẽ thêm một cái gì đó không liên quan trực tiếp đến câu hỏi nhưng cùng một ý tưởng: "DataFrames trong Spark cho Khoa học dữ liệu quy mô lớn" . Vì điều này mang lại Scala và R gần hơn, có thể có một sức mạnh tổng hợp OO / chức năng tuyệt vời đến từ điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.