Gói R đầu tiên mã nguồn để nghiên cứu để chuẩn bị viết gói riêng


47

Tôi đang dự định bắt đầu viết các gói R.

Tôi nghĩ rằng sẽ tốt khi nghiên cứu mã nguồn của các gói hiện có để tìm hiểu các quy ước về xây dựng gói.

Tiêu chí của tôi cho các gói tốt để nghiên cứu:

  • Ý tưởng thống kê / kỹ thuật đơn giản : Vấn đề là tìm hiểu về các cơ chế xây dựng gói. Hiểu về gói không nên yêu cầu kiến ​​thức cụ thể về tên miền chi tiết về chủ đề thực tế của gói.
  • Phong cách mã hóa đơn giản và thông thường : Tôi đang tìm kiếm một cái gì đó nhiều hơn một chút Hello Worldnhưng không phải là nhiều hơn nữa. Các thủ thuật và hack đột xuất sẽ gây mất tập trung khi lần đầu tiên học các gói R.
  • Phong cách mã hóa tốt : Mã được viết tốt. Nó cho thấy cả sự hiểu biết về mã hóa tốt, nói chung và nhận thức về các quy ước về mã hóa trong R.

Câu hỏi:

  • Những gói nào sẽ tốt để học?
  • Tại sao mã nguồn gói được đề xuất sẽ tốt để nghiên cứu liên quan đến các tiêu chí được đề cập ở trên hoặc bất kỳ tiêu chí nào khác có thể có liên quan?

Cập nhật (13/12/2010) Sau những bình luận của Dirk, tôi muốn nói rõ rằng không có nghi ngờ gì nhiều gói sẽ tốt để nghiên cứu trước. Tôi cũng đồng ý rằng các gói sẽ cung cấp các mô hình cho những thứ khác nhau (ví dụ: họa tiết, lớp S3, lớp S4, kiểm tra đơn vị, Roxygen, v.v.). Tuy nhiên, sẽ rất thú vị khi đọc các đề xuất cụ thể về các gói tốt để bắt đầu và lý do tại sao chúng sẽ là các gói tốt để bắt đầu.

Tôi cũng đã cập nhật câu hỏi ở trên để chỉ "gói" chứ không phải "gói".


2
Một cách khác để xem xét điều này là tìm kiếm các tác giả gói cụ thể ; một số tác giả rất giỏi trong việc tuân theo các thực tiễn tốt nhất và viết mã rõ ràng, trong trường hợp đó bạn có thể nghiên cứu tất cả các tài liệu của họ.
Shane

1
@Shane Điểm tốt. Bất kỳ đề xuất về tác giả gói nào có thể tốt để nghiên cứu khi lần đầu tiên viết gói?
Jeromy Anglim

Câu trả lời:


15

Tôi sẽ đề nghị nhìn vào gói sở thú vì những lý do sau:

  1. Nó có một vài họa tiết được viết tốt;
  2. Nó sử dụng một không gian tên sử dụng useDynLib, import, export, và S3method;
  3. Nó có một số bài kiểm tra đơn vị sử dụng RUnit;
  4. Nó cung cấp các ví dụ tốt về cách tạo / tài liệu các phương thức S3;
  5. Nó có một số cuộc gọi đến mã C thông qua .Callgiao diện;
  6. Nó chứa một bản demo (âm mưu);
  7. Nó nhằm mục đích phù hợp với cài đặt R lõi (ví dụ: các chức năng hoạt động tương tự, nó không che giấu / ghi đè các chức năng cơ bản, v.v.)

Nó không sử dụng roxygen, rất tiện dụng, nhưng 7 trên 8 không tệ. ;-)

Để đáp ứng các tiêu chí của bạn:

  1. Khái niệm này rất đơn giản: zoolà một lớp giống như ma trận được sắp xếp theo thứ gì đó . Không có kiến ​​thức cụ thể về tên miền cần thiết.
  2. zoo dường như có một vài quy ước mã hóa bình dị, nhưng không có gì vượt trội ngăn cản việc hiểu mã.
  3. zoo nhằm mục đích phù hợp với R càng tốt.

1
Nơi nào có thể tìm thấy gói này?
Adam SA

@Adam: Tôi đã thêm một liên kết đến sở thú trong câu trả lời của tôi. Trang đó cũng có một liên kết đến trang dự án R-forge của sở thú.
Joshua Ulrich

9

Tôi không coi mình là một nhà phát triển gói R đã thành lập nhưng gần đây đã trải qua quá trình viết và duy trì một gói cho môi trường làm việc của tôi.

Trước đây tôi đã viết / duy trì / cập nhật một tập các kịch bản mà tôi sẽ chuyển từ dự án này sang dự án thông qua source()chức năng. Kết quả cuối cùng của việc này là tôi đã kết thúc với các tập lệnh chủ yếu là dư thừa ở nhiều nơi trên các ổ đĩa mạng của chúng tôi. Không bao giờ rõ ràng nơi tập hợp các kịch bản cập nhật nhất được đặt. Tôi đã chuyển sang viết / duy trì một gói sử dụng roxygen. Nó đã đơn giản hóa cuộc sống của tôi và giúp chia sẻ công việc của tôi với các đồng nghiệp dễ dàng hơn.

Dựa trên các tiêu chí của bạn ở trên, tôi thứ hai khuyến nghị xem xét các gói mà Hadley đã viết. Đặc biệt, tôi nghĩ rằng đọc qua wiki devtools sẽ rất hữu ích. Mã của Hadley được ghi chép tốt và một số gói của anh ta sử dụng roxygen. Tôi nghĩ rằng việc viết và duy trì một tài liệu cho cả hai hàm R và tài liệu R dễ dàng hơn nhiều so với việc chúng được tách ra ở hai vị trí (tệp .R và .RD).

Các gói của Hadley cũng phục vụ một số khái niệm khá cơ bản và tương đối dễ bị lỗi (imho) nếu bạn đang tìm kiếm các gợi ý về các ý tưởng khía cạnh kỹ thuật. Tôi thấy mình đang đào mã nguồn plyr khi tôi tìm kiếm một con trỏ trên tài liệu roxygen hoặc các tác vụ cơ bản khác.


Cảm ơn. Các wiki devtools, đặc biệt, có rất nhiều ý tưởng tuyệt vời.
Jeromy Anglim

@Jeromy - Đã đọc các bài đăng gần đây của bạn về nghiên cứu có thể tái tạo, v.v (uber uber rất hữu ích vì vậy cảm ơn bạn!) Có nghĩa là bạn sẽ nhanh chóng sử dụng roxygen. Tôi cũng nên đề cập rằng Eclipse hỗ trợ cú pháp roxygen và làm cho nó trở thành một quá trình chuyển đổi khá dễ dàng. Nhiệm vụ khó khăn nhất mà tôi đã vượt qua là viết các họa tiết hữu ích và hiệu quả. Tôi tưởng tượng bạn đang bắt đầu từ một điểm nhảy cao hơn nhiều so với tôi về vấn đề đó.
Đuổi theo

2
Chỉ không đọc nguồn ggplot2. Nó sẽ khiến não bạn chảy máu
hadley

Thật là một nhà phát triển R trung thực!
Leo5188

7

Tại sao không thực hiện một cách tiếp cận lấy mẫu ngẫu nhiên theo kinh nghiệm? Chỉ cần chọn một vài và xem công việc nào cho bạn.

Đùa sang một bên, chỉ cần nhìn vào một vài gói bạn tự sử dụng và quen thuộc. Tải xuống chúng rất dễ dàng hoặc nếu bạn thích, bạn cũng có thể xem chúng qua giao diện web tại R-Forge, RForge hoặc Github.

Bạn rất có thể sẽ kết thúc với các gói khác nhau cho các ý tưởng khác nhau. Một số có thể giúp bạn với cách họ tích hợp, nói, một họa tiết. Một số có thể giúp với mã được biên dịch. Hoặc kiểm tra đơn vị. Hoặc Roxygen. Có khoảng 2600 người trong số họ, vậy tại sao lại ám ảnh về một điều tốt nhất?


Điểm tuyệt vời. Tôi đã lên kế hoạch để khám phá bản thân mình. Và tất nhiên, khám phá là một nửa niềm vui. Và tôi đồng ý các gói khác nhau dạy những điều khác nhau. Tôi đồng ý rằng nhiều gói sẽ là điểm khởi đầu tốt. Tôi sẽ cập nhật câu hỏi của mình để phản ánh ý tưởng rằng nhiều gói sẽ đáp ứng các tiêu chí. Nhưng có một số gợi ý cụ thể có thể tiết kiệm cho tôi và những người khác mới sử dụng gói R một thời gian. Tôi cũng nghĩ rằng các nhà phát triển được thành lập của các gói R ở vị trí tốt hơn để nhận xét về giá trị của một gói nhất định cho mục đích học tập.
Jeromy Anglim

2
Vì bạn cần phải bắt đầu ở đâu đó :)
hans0l0

2

Một lời khuyên khác có thể là xem xét các gói của bạn sẽ phụ thuộc hoặc tương tác với nó, đặc biệt nếu chúng thực hiện một số mục mà Joshua Ulrich đề cập hoặc đã được viết bởi các tác giả nổi tiếng. Có thể hữu ích để tìm hiểu cách mọi thứ được thực hiện trong lĩnh vực của bạn, để đảm bảo tính tương thích. Thông thường mọi người sẽ nghĩ về một số vấn đề nhất định và đọc di chuyển giải pháp của họ là hữu ích.


1

tôi muốn giới thiệu gói định hình lại của hadley. bạn có thể tìm nguồn tại https://github.com/hadley/reshape


2
Cảm ơn. Tại sao bạn đề nghị nó?
Jeromy Anglim

4
Tôi sẽ không đề xuất định hình lại - thậm chí tôi không hiểu cách thức hoạt động của nó. Reshape2 tốt hơn nhiều và tuân theo nhiều nguyên tắc phát triển tốt hơn.
hadley
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.