자체 패키지 작성 준비를위한 최초의 R 패키지 소스 코드 연구


47

R 패키지 작성을 시작할 계획입니다.

패키지 구성 규칙을 배우기 위해 기존 패키지의 소스 코드를 연구하는 것이 좋을 것이라고 생각했습니다.

공부하기 좋은 패키지에 대한 나의 기준 :

  • 간단한 통계 / 기술 아이디어 : 요점은 패키지 구성의 메커니즘에 대해 배우는 것입니다. 패키지를 이해하려면 패키지의 실제 주제에 대한 자세한 도메인 별 지식이 필요하지 않습니다.
  • 단순하고 전통적인 코딩 스타일 : 나는 조금 더 많은 것을 찾고 Hello World있습니다. R 패키지를 처음 배울 때 특이한 속임수와 해킹이 산만해질 것입니다.
  • 좋은 코딩 스타일 : 코드가 잘 작성되었습니다. 일반적으로 좋은 코딩에 대한 이해와 R의 코딩 규칙에 대한 인식을 모두 보여줍니다.

질문 :

  • 어떤 패키지가 공부하기에 좋을까요?
  • 제안 된 패키지 소스 코드가 위에서 언급 한 기준 또는 관련이있을 수있는 다른 기준과 관련하여 연구하기에 좋은 이유는 무엇입니까?

업데이트 (13/12/2010) 나는 분명히 의심의 여지가 많은 패키지가 먼저 공부하기 좋은 없을 것이라는 점을 확인하고 싶었 더크의 의견에 따라. 또한 패키지가 다른 것들 (예 : 비 네트, S3 클래스, S4 클래스, 단위 테스트, Roxygen 등)에 대한 모델을 제공한다는 데 동의합니다. 그럼에도 불구하고, 좋은 패키지로 시작하고 좋은 패키지가 시작되는 이유에 대한 구체적인 제안을 읽는 것이 흥미로울 것입니다.

또한 "패키지"대신 "패키지"를 참조하도록 위의 질문을 업데이트했습니다.


2
이것을 보는 또 다른 방법은 특정 패키지 작성자 를 찾는 것입니다 . 특정 저자는 모범 사례를 따르고 명확한 코드를 작성하는 데 매우 능숙하며,이 경우 모든 자료를 연구 할 수 있습니다.
Shane

1
@ 셰인 좋은 지적. 패키지 작성을 처음 배울 때 어떤 패키지 작성자가 공부하는 것이 좋을지에 대한 제안이 있습니까?
Jeromy Anglim

답변:


15

다음과 같은 이유로 동물원 패키지를 살펴볼 것을 제안합니다 .

  1. 잘 쓰여진 비 네트가 여러 개 있습니다.
  2. 그것은 사용하여 네임 스페이스를 사용 useDynLib, import, export, 그리고 S3method;
  3. 다음을 사용하여 여러 단위 테스트를 수행합니다 RUnit.
  4. S3 메소드를 작성 / 문서화하는 방법에 대한 좋은 예를 제공합니다.
  5. .Call인터페이스 를 통해 C 코드를 호출합니다 .
  6. (플로팅) 데모를 포함합니다.
  7. 핵심 R 설치와 일관성을 유지하는 것을 목표로합니다 (예 : 기능이 유사하게 작동하고 기본 기능을 마스킹 / 재정의하지 않습니다).

그것은 매우 편리한 roxygen을 사용하지 않지만 8 개 중 7 개는 나쁘지 않습니다. ;-)

기준에 응답하려면

  1. 개념은 간단하다 : 무언가에zoo 의해 정렬 된 행렬과 같은 클래스 이다. 도메인 별 지식이 필요하지 않습니다.
  2. zoo 몇 가지 특유의 코딩 규칙이있는 것 같지만 코드를 이해하는 데 방해가되는 것은 없습니다.
  3. zoo 가능한 한 R과 일치하는 것을 목표로합니다.

1
이 패키지는 어디에서 찾을 수 있습니까?
Adam SA

@ 아담 : 내 대답에 동물원에 대한 링크를 추가했습니다. 이 페이지에는 동물원의 R- 포지 프로젝트 페이지에 대한 링크도 있습니다.
Joshua Ulrich

9

나는 저 자신을 확립 된 R 패키지 개발자로 생각하지 않지만 최근에는 작업 환경을위한 패키지를 작성하고 유지 관리하는 프로세스를 겪었습니다.

이전에는 source()함수 를 통해 프로젝트에서 프로젝트로 전달할 스크립트 세트를 작성 / 유지 관리 / 업데이트했습니다 . 이것의 최종 결과는 네트워크 드라이브의 여러 위치에 대부분 여분의 스크립트가 걸려 있다는 것입니다. 최신 스크립트 세트가 어디에 있는지 명확하지 않았습니다. 이후 roxygen을 사용하여 패키지를 작성 / 유지 관리로 마이그레이션했습니다. 그것은 내 인생을 크게 단순화 시켰고 동료들과 나의 작업을 더 쉽게 공유 할 수있게 해주었다.

위의 기준에 따라 Hadley가 작성한 패키지를 검토하는 것이 좋습니다. 특히 devtools wiki를 읽는 것이 도움이 될 것이라고 생각 합니다. Hadley의 코드는 잘 문서화되어 있으며 그의 패키지 중 일부는 roxygen을 사용합니다. R 함수와 R 문서 모두에 대해 하나의 문서를 작성하고 유지 관리하는 것이 두 위치 (.R 및 .RD 파일)로 분할되는 것보다 훨씬 쉽다고 생각합니다.

Hadley의 패키지는 상당히 기본적인 개념을 제공하며 기술적 측면 아이디어에 대한 포인터를 찾고 있다면 비교적 쉽게 파싱 (imho)하기 쉽습니다. roxygen 문서 또는 기타 기본 작업에 대한 포인터를 찾을 때 plyr 소스 코드를 파고 들었습니다 .


감사. 특히 devtools 위키에는 많은 훌륭한 아이디어가 있습니다.
Jeromy Anglim

@Jeromy-재생 가능한 연구 등에 관한 최근 게시물을 읽었을 때 (uber uber가 도움이되었으므로 감사합니다!) 매우 빨리 roxygen을 복용하게됩니다. 또한 Eclipse가 roxygen 구문을 지원하고 꽤 쉽게 전환 할 수 있다고 언급 했어야합니다. 내가 극복 한 가장 어려운 일은 유용하고 생산적인 비 네트를 작성하는 것입니다. 나는 당신이 내가 생각하는 것보다 훨씬 높은 점프 포인트에서 출발하고 있다고 상상합니다.
추적

2
ggplot2 소스를 읽지 마십시오. 그것은 당신의 두뇌가 피를 흘릴 것입니다
hadley

정직한 R 개발자!
Leo5188

7

경험적으로 구동되는 랜덤 샘플링 방식을 사용하는 것이 어떻습니까? 몇 가지를 고르면 어떤 것이 효과가 있는지보십시오.

따로 따로, 자신이 사용하고 익숙한 몇 가지 패키지를 살펴보십시오. 쉽게 다운로드하거나 원하는 경우 R-Forge, RForge 또는 Github의 웹 인터페이스를 통해 볼 수도 있습니다.

서로 다른 아이디어를 위해 다른 패키지로 끝날 것입니다. 일부는 비 네트를 통합하는 방식에 도움이 될 수 있습니다. 일부는 컴파일 된 코드에 도움이 될 수 있습니다. 또는 단위 테스트. 또는 Roxygen. 약 2600 개가 있는데 왜 하나의 최고에 집착 하는가?


좋은 지적. 나는 나 자신을 탐구 할 계획이었다. 물론 탐험은 반 재미입니다. 그리고 나는 다른 패키지가 다른 것을 가르치는 데 동의합니다. 많은 패키지가 좋은 출발점이 될 것에 동의합니다. 여러 패키지가 기준을 충족시킬 것이라는 아이디어를 반영하여 질문을 업데이트하겠습니다. 그러나 구체적인 제안이 있으면 자신과 다른 사람들이 R 패키지를 처음 접할 수 있습니다. 또한 R 패키지의 기존 개발자가 학습 목적으로 주어진 패키지의 장점에 대해 의견을 나눌 수있는 더 나은 위치에 있다고 생각합니다.
Jeromy Anglim

2
cuz 당신은 어딘가에서 시작해야합니다 :)
hans0l0

2

조슈아 울리히 (Joshua Ulrich)가 언급했거나 저명한 작가가 작성한 일부 항목을 구현하는 경우, 의존하거나 상호 작용할 패키지를 살펴 보는 것도 좋습니다. 호환성을 확보하기 위해 해당 분야에서 수행되는 작업을 배우는 것이 도움이 될 수 있습니다. 사람들은 종종 특정 문제에 대해 생각하고 솔루션 마이그레이션을 읽는 것이 도움이 될 것입니다.


1

hadley 's reshape 패키지를 추천합니다. https://github.com/hadley/reshape 에서 소스를 찾을 수 있습니다


2
감사. 왜 추천합니까?
Jeromy Anglim

4
나는 모양을 바꾸는 것을 권장하지 않습니다-심지어 그것이 어떻게 작동하는지 이해하지 못합니다. Reshape2는 훨씬 더 좋고 더 많은 개발 원칙을 따릅니다.
hadley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.