source("config/_setup.R")
O Guia de Contribuição e Estilo serve para orientar a forma de trabalhar que seja eficiente, padronizada, coordenada e segura e produza conteúdo de qualidade. Este guia contém orientações de como escrever o código e escrever a documentação.
Os números circulados de vermelhos nas imagens abaixo indicam diferenças entre os padrões de escrita de código R. Os dois fragmentos de código fazem a mesma coisa, funcionam igualmente, porém o primeiro é o padrão adotado no labestData.
<-
e não o operador =
para atribuir conteúdo aos
objetos. Deixe espaço ao redor do operador <-
. Isso resolve a
ambiguidade: x<-2
é x < -2
ou x <- 2
?^
e /
,
todos os demais tem espaços ao redor: + - * %% %/% %*%
. Um caso
particular é o -
que não tem espaço quando é o negativo (-5 * 2
)
mas tem quando é o menos (2 - 5
).== != > >= < <= & && | || %in%
..
e o
_
. Existe uma preferência para que nomes de funções em pacotes usem
o _
porque o .
é usado na construção de funções método.T
ou F
os valores lógicos TRUE
e FALSE
. Os
últimos são palavras reservadas do sistema mas os primeiros são
apenas objetos, ou seja, nada impede de fazer T <- 10
e isso seria
desastroso para que abrevia TRUE
com T
.data.frames
com
maiúsculas. O R é case sensitive e as chances de erro de digitação
são maiores.;
e faça quebra de linha para deixar o código mais
vertical. Ele é um operador que permite escrever duas instruções na
mesma linha mas isso faz crescer horizontalmente, pode ultrapassar as
margens.function
, if
, for
, while
, etc, deixe
espaço entre o parentese direito e chave esquerda.if
, for
, while
,
etc) antecede a chave que abre e chave que fecha fica sozinha na
linha (indentada com o construtor), a menos que esteja acompanhada de
um cláusula else
, de outra chave ou parêntese.function
.function
, if
, for
, while
,
sem as chaves mesmo que o corpo seja uma linha curta. As chaves
evitam que linhas adicionadas acidentalmente provoquem erros e
deixa seu código mais claro.return
no final das suas funções porque isso marca melhor o
que a função retorna. Usuários não familiares agradecem.Global Options > Code > Editing
. Os mais experientes dizem que 4
espaços dá mais evidência da hierarquia do código.library
e não require
. Apesar do último
parecer mais lógico por ser um verbo, library
é que carrega um
pacote. Se o pacote não estiver presente, a library
retorna um
Error (!) e a require
retorna um FALSE
.~
é um operador como o -
: tem espaço se existe um objeto que o
precede, caso contrário não tem.#
, que é mais barato. Só o Emacs que
usa dois sinais de comentários para o R, lisp e outras linguagens
porque no Emacs o número de sinais tem função para indentação. Mas
isso é customizável e recomenda-se que você mude para um.Para o labestData conter diversas obras com rápida e precisa
identificação dos conjuntos de dados, foi necessário adotar uma regra
de nomeação. A regra é bem simples. O nome é composto por 3 partes:
ObraIndNumer
. Obra
é a referência a obra, Ind
é o tipo de elemento
identificador e Num
é o número do elemento identificador. São
exemplos da aplicação dessa regra
A tabela abaixo resume as siglas usadas para cada tipo de referência ao conjunto de dados dentro da obra.
| Referência | Abreviação | |------------+------------| | Tabela | Tb | | Quadro | Qd | | Exercício | Ex | | Exemplo | Eg | | Apêndice | Ap | | Anexo | An | | Página | Pg |
A prioridade na hora de atribuir a identificação é a seguinte: Tabela = Quadro > Exemplo = Exercício > Apêndice = Anexo > Página. Ou seja, se a tabela 5 faz parte do exemplo 3 que está na página 122, o nome do dataset terá sufixo Tb5. Note que uma página pode ter mais de uma tabela, bem como mais de um exemplo. Além do mais, diferentes edições podem preservar com mais facilidade a numeração das tabelas do que a localização delas nas mesmas páginas. Sendo assim, um dataset só será identificado como sufixo Ex ou Eg se não estiver em Tabela ou Quadro numerado e só será identificado pela página se não houver outra alternativa.
Dados de arquivos pessoais que não foram usados em uma publicação (artigo, trabalho de conclusão de curso, dissertação ou tese), poder ter o nome do proprietário, do local de origem, ou outro identificador que seja único e descritivo do conjunto de dados.
O nome das variáveis não deve conter acentos (ASCII pleno), não pode iniciar com número e só admite o underline como não alfanumérico (mas evite). As variáveis de nome composto e longo devem ser representadas por siglas e as de nome simples mas longo, por abreviação. Veja a tabela com exemplos de como dar nome para variáveis do conjunto de dados.
| Variável | Nome da coluna | |----------------------------+----------------| | Dias | dias | | Peso | peso | | Idade | idade | | Renda | renda | | Escolaridade | escol | | Cultivar | cult | | Variedade | varied | | Adubação | adub | | Produtividade | prod | | Temperatura | temp | | Pressão sanguínea | ps | | Matéria orgânica | mo | | Teor de magnésio do solo | mg | | Diâmetro à altura do peito | dap | | Massa seca de parte aérea | mspa |
É fundamental que os objetos que armazenem as variáveis declarem o tipo correto de valor. São 5 os tipos principais:
numeric
: é o tipo de valor para variáveis contínuas. Normalmente
essas variáveis tem unidade de medida e números decimais (e.g. 1.85
m, 78.5 kg).integer
: é o tipo de valor para variáveis discretas (números
inteiros). Variáveis de contagem são desse tipo. São também as
variáveis que identificam a repetição ou amostra, normalmente
sequências de incremento 1 que começam em 1 ou 0. Quando variáveis
contínuas tiverem representação que não tenha casas decimais, elas
dever ser declaradas como integer
para salvar espaço em disco e
tornar as contas mais rápidas.factor
: é tipo de valor para variáveis categóricas. São rótulos
que classificam um conjunto de indivíduos/observações com uma
variável qualitativa comum. Como exemplo, tem-se os blocos de um
experimento em delineamento de blocos casualizados, as observações
do mesmo bairro, os pacientes do mesmo sexo, as parcelas do mesmo
local ou extrato, etc.factor
ao invés de integer
para a
variável, mesmo que os rótulos continuem a ser os números
inteiros. Isso evita erros na interpretação e análise dos
dados. Uma opção para os blocos, por exemplo, é usar números
romanos, como I, II e III, ao invés de 1, 2 e 3 (use
as.roman(1:n)
). Para fatores como variedade, uma alternativas
é usar letras maiúsculas, como A, B e C, ao invés dos números.factor
) e
ordinais (ordered
).character
: é o tipo de valor para identificar/descrever
indivíduos, como o nome dos alunos em uma classe. Essas variáveis
dificilmente representam uma característica preditiva de algo.logical
: são para variáveis que assumem dois valores (TRUE
,
FALSE
). Também podem ser representados pelos valores inteiros 1
e 0.Existem casos em que os dados não são uma tabela (várias variáveis, em
cada coluna uma variável de tipo diferente), ou seja, usar um
data.frame
para armazená-los não é adequado. Existem três casos
principais:
precip
).matrix
). Pode-se atribuir nome para as
linhas e colunas (rownames
e colnames
) para identificar os
registros.ts
(Time-Series) que armazena os valores da amostra junto com a
informação da frequência em que foi observada.Os conjuntos de dados devem ter uma documentação que permita
. Existem vários campos da documentação que podem ser usados, no entanto, somente 7 serão considerados indispensáveis. Uma lista completa com a maioria dos campos está documentada em https://cran.r-project.org/web/packages/roxygen2/roxygen2.pdf.
Para ilustrar o uso dos campos principais, abaixo tem-se a documentação
do data.frame RamalhoTb4.7
. Embora os campos sejam autoexplicativos
por causa do nome, segue breve explicação.
@name
: É o campo com o nome do objeto que contém os dados (1).
@title
: É o título que representa o conjunto de dados. O título deve
estar apropriado para o conjunto de dados fornecendo uma boa descrição
do mesmo. O título deve estar captalizado, ou seja, iniciais
maiúsculas, exceto para artigos e preposições. Para que os títulos
aparecem na documentação em PDF, deve-se usar \enc{}{}
(2) para as
letras não ASCII, como as vogais acentuadas e o cedilha.
@description
: É o campo para fornecer a descrição detalhada do conjunto de dados,
como delineamento ou plano amostral, objetivo do estudo (hipóteses ou
teoria), pessoas/organizações envolvidas. A descrição pode conter mais
de um parágrafo. Formatação de texto para itálico é feito com
\emph{}
(3), que deve ser usado no nome científico de
espécies. Quando for mencionada alguma referência na obra (4) sobre os
dados, esta deve ser incluída na descrição e aparecer no campo
@references
.
@format
: Campo que informa sobre a forma e conteúdo do conjunto de
dados. Primeiramente deve ser informado o tipo de objeto e suas
dimensões (5) e depois fazer a descrição de cada uma das variáveis. A
descrição das variáveis deve conter nome, explicação, unidade de
medida e tipo de valor. A unidade de medida deve ser escrita com
notação de potência ao invés de denominadores (6).
@keywords
: São palavras que classificam o conjunto de dados de acordo, por
exemplo, com o tipo de variável resposta, delineamento (7) ou análise
recomendada (ex: DIC, DQL, contagem, proporção, ACP, RP). Elas
aparecem no índice remissivo no manual em PDF e facilitam na hora de
escolher dados para poder praticar.
@source
: Indica a fonte dos dados. Normalmente é a referência
bibliográfica (8), a url do endereço de origem ou o nome
proprietário dos dados (indivíduo, grupo ou instituição). Quando é
mencionada outra fonte para os dados, como um artigo, dissertação ou
tese, esta referência também precisa ser incluída (9). Para as obras
usadas no pacote, é suficiente apenas a chamada da referência (autores
e ano).
@examples
: Contém código R que faz análise exploratória dos
dados, como gráficos (13) e tabelas (12). Os pacotes necessários para
executar o código da sessão devem ser carregados (10), bem como os
próprios dados (11). Depois da documentação, um NULL
deve estar
presente (14).
O fluxograma abaixo resumo em linhas gerais o fluxo de trabalho do labestData. O fluxo é composto de 3 partes: 1) a da esquerda resume ações feitas no gitlab ou entre gitlab e repositório local; 2) a do meio são ações usando o R com o pacote devtools; e 3) são as ações usando o Git.
A primeira coisa é ler o Guia de Contribuição, que é este documento. Em seguida, catalogar toda a obra criando uma milestone para ela. Dentro da milestone devem ser criados issues. Cada issue deve ter o conteúdo para uma semana de desenvolvimento.
O desenvolvimento começa com a criação de um ramo para inclusão das
contribuições. Cada issue no gitlab é numerado e para uma fácil
indentificação, o padrão é criar ramos autor numerados: jhenifer33
,
alessandra90
, walmes160
. O ramo de desenvolvimento deve ser tirado
do ramo baby. Antes, no entanto, atualize o ramo baby.
Com o Git no ramo de desenvolvimento, o trabalho de inclusão do conjunto
de dados começa com a criação do arquivo texto txt
no diretório
data-raw/
. O arquivo deve ser um TSV (tab separeted values) com
valores separados por tabulação e a primeira linha como cabeçalho. Você
tem a opção de fazer commits quando convier. Carregue os dados em uma
sessão R e gere o binário rda
no diretório data/
. Em seguida,
carrege o pacote e experimente os dados que acabou de incluir para
eliminar qualquer eventual erro. Escreva a documentação do conjunto de
dados no diretório R/
. Use a função roxy_data()
definida em
https://gitlab.c3sl.ufpr.br/snippets/46. Por fim, gere e verifique se
a transcrição para o formato Rd
aconteceu sem erros.
Agora que todos os arquivos foram criados (txt
, rda
, R
e Rd
), é
necessário fazer uma verificação completa no pacote. Se problemas
forem indentificados nessa fase, deve procurar fazer a correção antes de
subir. Se não houveram erros, então faça o empacotamento para gerar o
tar.gz
do pacote. Por fim, suba para o repositório remoto no gitlab.
Na interface do gitlab, faça um merge request (requisição de fusão) para o merger designado à você. Se o MR for aceito, ponto positivo, você pode fechar o issue pois o completou e remover o ramo que já não é mais necessário. Caso contrário, providencie as correções indicadas pelo merger e, quando prontas, notifique-o novamente no mesmo MR.
O Projeto só termina quando todas as obras tiverem sido concluídas.
[^1]: Processador de texto é diferente de editor de texto. O MS Word e o LibreOffice Writer são processadores enquanto que o Emacs e o Geany são editores.
[^2]: Faça C 7 C 1 -
(ctrol+7 ctrol+1 traço) para fazer 71 traços.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.