Primeiro código fonte dos pacotes R a estudar em preparação para escrever o próprio pacote

47

Estou planejando começar a escrever pacotes R.

Eu pensei que seria bom estudar o código fonte dos pacotes existentes para aprender as convenções de construção de pacotes.

Meus critérios para bons pacotes para estudar:

  • Idéias técnicas / estatísticas simples : o objetivo é aprender sobre a mecânica da construção de pacotes. A compreensão do pacote não deve exigir um conhecimento altamente específico e específico do domínio sobre o tópico real do pacote.
  • Estilo de codificação simples e convencional : estou procurando algo um pouco mais do que, Hello Worldmas não muito mais. Truques e truques idiossincráticos seriam uma distração quando aprendemos os pacotes R.
  • Bom estilo de codificação : o código está bem escrito. Revela um entendimento de boa codificação, em geral, e uma conscientização das convenções de codificação em R.

Questões:

  • Quais pacotes seriam bons para estudar?
  • Por que o código-fonte do pacote sugerido seria bom para estudar em relação aos critérios mencionados acima ou a qualquer outro critério que possa ser relevante?

Atualização (13/12/2010) Após os comentários de Dirk, eu queria deixar claro que sem dúvida muitos pacotes seriam bons para estudar primeiro. Também concordo que os pacotes fornecerão modelos para coisas diferentes (por exemplo, vinhetas, classes S3, classes S4, testes de unidade, Roxygen, etc.). No entanto, seria interessante ler sugestões concretas sobre bons pacotes para começar e as razões pelas quais eles seriam bons pacotes para começar.

Também atualizei a pergunta acima para se referir a "pacotes" em vez de "pacote".

Jeromy Anglim
fonte
2
Outra maneira de analisar isso é procurar autores de pacotes específicos ; certos autores são muito bons em seguir as práticas recomendadas e escrever código claro; nesse caso, você pode estudar todos os seus materiais.
Shane
1
@ Shane Bom ponto. Alguma sugestão sobre quais autores de pacotes podem ser bons para estudar ao aprender a escrever pacotes?
Jeromy Anglim

Respostas:

15

Sugiro olhar para o pacote do zoológico pelos seguintes motivos:

  1. Possui várias vinhetas bem escritas;
  2. Ele usa um namespace usando useDynLib, import, export, e S3method;
  3. Possui vários testes de unidade usando RUnit;
  4. Ele fornece bons exemplos de como criar / documentar métodos S3;
  5. Possui algumas chamadas para o código C através da .Callinterface;
  6. Ele contém uma demonstração (plotagem);
  7. Tem como objetivo ser consistente com a instalação principal do R (por exemplo, funções se comportam de maneira semelhante, não mascara / substitui as funções básicas, etc.)

Ele não usa roxo, o que é muito útil, mas 7 em 8 não são ruins. ;-)

Para responder aos seus critérios:

  1. O conceito é simples: zooé uma classe de matriz ordenada por alguma coisa . Nenhum conhecimento específico do domínio é necessário.
  2. zoo parece ter algumas convenções de codificação idiossincráticas, mas nada exagerado que impede a compreensão do código.
  3. zoo pretende ser o mais consistente possível com R.
Joshua Ulrich
fonte
1
Onde podemos encontrar este pacote?
Adam SA
@ Adam: eu adicionei um link para o zoo na minha resposta. Essa página também possui um link para a página do projeto R-forge do zoo.
Joshua Ulrich
9

Não me considero um desenvolvedor de pacotes R estabelecido, mas recentemente passei pelo processo de escrever e manter um pacote para o meu ambiente de trabalho.

Anteriormente, eu estava escrevendo / mantendo / atualizando um conjunto de scripts que passaria de um projeto para outro por meio da source()função O resultado final foi que eu acabaria com scripts redundantes em vários lugares de nossas unidades de rede. Nunca ficou claro onde estava o conjunto de scripts mais atualizado. Desde então, migrei para escrever / manter um pacote utilizando o roxygen. Simplificou drasticamente minha vida e facilitou o compartilhamento de meu trabalho com colegas.

Com base nos seus critérios acima, apóio a recomendação de revisar os pacotes que Hadley escreveu. Em particular, acho que ler o wiki do devtools seria muito útil. O código de Hadley está bem documentado e vários de seus pacotes utilizam roxygen. Acho que escrever e manter um documento para as funções e documentação R é muito mais fácil do que dividi-los em dois locais (arquivos .R e .RD).

Os pacotes de Hadley também servem alguns conceitos bastante básicos e são relativamente fáceis de separar (imho) se você estiver procurando por dicas sobre as idéias de aspectos técnicos. Eu me pego pesquisando o código-fonte plyr quando estou procurando um ponteiro sobre a documentação do roxygen ou outras tarefas fundamentais.

correr atrás
fonte
Obrigado. O wiki do devtools, em particular, tem muitas ótimas idéias.
perfil completo de Jeromy Anglim
@ Jeromy - Depois de ler suas postagens recentes sobre pesquisa reproduzível, etc. Eu também deveria ter mencionado que o Eclipse suporta a sintaxe roxygen e a tornou uma transição bastante fácil. A tarefa mais difícil que venho superando é escrever vinhetas úteis e produtivas. Imagino que você esteja começando de um ponto de partida muito mais alto do que eu.
Chase
2
Só não leia a fonte ggplot2. Isso fará com que seu cérebro sangre
hadley
que desenvolvedor R honesto!
Leo5188
7

Por que não adotar uma abordagem de amostragem aleatória empiricamente orientada? Basta escolher alguns e ver qual funciona para você.

Brincadeiras à parte, basta olhar para alguns pacotes que você mesmo usa e está familiarizado. É fácil fazer o download deles ou, se preferir, também é possível visualizá-los por meio de uma interface da Web no R-Forge, RForge ou Github.

Você provavelmente acabará com pacotes diferentes para idéias diferentes. Alguns podem ajudá-lo com a maneira como eles integram, digamos, uma vinheta. Alguns podem ajudar com o código compilado. Ou testes de unidade. Ou Roxygen. Existem cerca de 2600 deles, então por que ficar obcecado com um único melhor?

Dirk Eddelbuettel
fonte
Ótimos pontos. Eu estava planejando me explorar. E, claro, a exploração é metade da diversão. E eu concordo que pacotes diferentes ensinam coisas diferentes. Concordo que muitos pacotes seriam bons pontos de partida. Atualizarei minha pergunta para refletir a ideia de que vários pacotes atenderiam aos critérios. Mas ter algumas sugestões concretas pode salvar a mim e a outros novos nos pacotes R algum tempo. Eu também acho que os desenvolvedores estabelecidos de pacotes R estão em uma posição melhor para comentar sobre os méritos de um determinado pacote para fins de aprendizado.
Jeromy Anglim
2
cuz que você precisa para começar em algum lugar :)
hans0l0
2

Outro conselho pode ser procurar pacotes que os seus dependerão ou interagirão, especialmente se eles implementarem alguns itens que Joshua Ulrich mencionou ou foram escritos por autores renomados. Pode ser útil aprender como as coisas são feitas em seu campo, para garantir alguma compatibilidade. Muitas vezes, as pessoas pensam sobre certos problemas e a leitura da solução pode ser útil.

Laurent
fonte
1

eu recomendaria o pacote de reformulação do hadley. você pode encontrar a fonte em https://github.com/hadley/reshape

Ramnath
fonte
2
Obrigado. Por que você recomenda isso?
Jeromy Anglim
4
Eu não recomendaria a reformulação - mesmo que eu não entenda como isso funciona. O Remodelar2 é muito melhor e segue muitos outros bons princípios de desenvolvimento.
Hadley