Skip to content
Snippets Groups Projects
Commit ab90de02 authored by Walmes Marques Zeviani's avatar Walmes Marques Zeviani
Browse files

Inicia o pacote labestData.

parents
Branches
No related tags found
No related merge requests found
% Guia de Contribuição
% PET Estatística UFPR - <pet.estatistica.ufpr@gmail.com>
> "O segredo de progredir é começar. O segredo se começar é dividir as
> tarefas árduas e complicadas em tarefas pequenas e fáceis de executar
> e depois começar pela primeira."
>
>> -- Mark Twain
## Para que serve um Guia de Contribuição? ##
O Guia de Contribuição Serve para orientar a forma de trabalhar, tanto
individual quanto em equipe, para que seja eficiente, padronizada,
coordenada e segura. Ele estabelece as regras e etapas principais do
deselvolvimento de um projeto. O Guia de Contribuição incluí orientações
de como escrever o código, mensagens de commit, etc TODO
Interessados em participar do projeto devem se orientar pelo Guia de
Contribuição sobre como o desenvolvimento acontece, das tarefas às
responsabilidades dos indivíduos e equipes, das etapas e prazos aos
resultados do projeto.
## O que é um fluxo de trabalho? ##
O fluxo de trabalho é a sequência de etapas que devem ser cumpridas para
atingir um resultado.
## Qual é o fluxo de trabalho do *labestData*?
1. Criar um *issue* para o Projeto no GitLab. Ao criar o *issue*,
dedique-se para escrever uma detalhada descrição do trabalho a ser
feito. Isso informa a equipe sobre onde você irá trabalhar para que
não se dublique os esforços. Todo issue têm um número associado,
como `#7` e isso deve ser usado nas comunicações.
2. Faça uma atualização do seu ramo `devel` local com o ramo `devel`
do projeto no GitLab (atualize o HEAD). Isso pode ser feito com o
comando `git pull` ou com `git fetch + git merge`. Em caso de
insegurança, visite a Apostila de Git do PET Estatística.
3. Crie um *branch* para começar o trabalho que você descreveu no
*issue* que acabou de criar. O nome do ramo deve ser `issue#?`, em
que `'?` representa o número do *issue*, por exemplo,
`issue#321`. Usar es'ses nomes facilita para os membros descobrirem
do se se trata esse *branch*, pois basta consultar o *issue* de
mesmo número.
4. Faça o trabalho que descreveu. Nessa etapa você senta na frente do
computador e escreve e isso envolve os seguintes passos:
1. Escreve, corrija, aperfeiçoe, amplie, revise, organize, limpe,
etc. Faça o trabalho.
2. Faça *commits* com regularidade, de preferência, por unidades de
trabalho para as quais se tem um significado claro - uma unidade
de trabalho comitável - que possa ser expresso sem prejuízo por
uma frase curta ou por uma lista de frases curtas. Quando não
souber se já possuí uma unidade de trabalho merecedora de
*commit*, faça o *commit* do mesmo jeito. Não seja precioso com
isso. No entanto, seja caprichoso ao fazer a sua mensagem de
*commit* para garentir que esteja em conformidade com o guia de
boas práticas.
3. Em intervalos maiores, mas ainda com frequência, suba seu
trabalho para o repositório. Isso se faz com o comando `git
push`. É importante fazer sempre para evitar de perder o
trabalho da sua máquina que está sujeita a avaria.
6. Quando cumprir com o trabalho previsto no seu *issue*, dê o push
final e faça uma requisição de mescla - um *merge request* (MR). Ao
criar o MR, assim como foi para o *issue*, existe um espaço para a
descrição de tudo o que o *branch*. Basicamente isso é um resumo de
todos os *commits* feitos. Embora a descrição do *issue* informe o
que estava previsto fazer, isso não significa que tudo foi
feito. Você pode ter feito trabalho a mais, ou visto que algo não
foi necessário. Então relate na descrição do MR exatamente o
que será adicionado ao ramo alvo. Os MR devem ser para o ramo
`devel` e devem ser atribuídos à outra pessoa.
7. Aguarde a avaliação do MR. Nessa etapa quem trabalha é o *merger* -
colaborador responsável por avaliar o seu *branch* e aplicar o
*merge*. Em caso de aprovação, o *merge* será aplicado. Em caso
contrário, você será notificado.
8. Se o MR não foi aceito, o *merger* vai informar o que fazer com
mensagem abaixo da descrição do merge. Faça as adequações
solicitadas. Retome da etapa 4.
9. Quando o MR for aprovado, feche o *issue* correspondente. Indique
na mensagem de fechamento do *issue* qual foi o número do MR
dele. Os ramos de demanda - com prefixo *issue* - são removidos
após o *merge* mas os *issues* e os MR - que junto com os *commits*
contam a trajetória do projeto - permanem no GitLab.
## O que é um Guia de Estilo de Código? ##
Um Guia de Estilo de Código é um conjunto de recomendações (ou regras)
para padronizar a forma de escrever código. Códigos que são escritos
seguindo um estilo padrão são mais fáceis de manter, modificar e
garantir que estão corretamente escritos e funcionais, principalmente
quando muitos programadores estão envolvidos.
Quase todas as linguagem de programação permitem que os usuários adotem
diferentes padrões de escrita de código. Algumas não diferenciam
maiúsculas e outras não exigem indentação, por exemplo. Em função de
simplicidade, comodismo ou inércia na hora de escrever ou de
características da linguagem ou do editor, os usuários quase sempre tem
padrão particular para escrita de código.
## Qual o guia de estilo de código? ##
No pacote *labestData* deve ser considerado o idiom padrão do R,
descrito no [STYLEGUIDE.md].
## Como dar nome aos datasets? ##
No caso de datasets de livros (obras impressas), o nome do dataset é
formado pelo sobrenome do primeiro autor seguido da indentificação da
tabela na obra. Considera os exemplos
* ZimmermannTb8.2: Tabela 8.2 do Zimmermann (2004);
* RamalhoTb4.3: Tabela 3 do capítulo 4 em Ramalho, Ferreira e Oliveira
(2005). Nesse livro as tabelas tem numeração reiniciada em todo
capítulo e por isso adiciona-se o numeral do capítulo para evitar
ambiguidade, já que vários capítulos podem ter a tabela 1.
* BanzattoQd3.6.1: Quadro 3.6.1 do Banzatto e Kronka (2013). Este
livro usa o nome quadro ao invés de tabela.
* DiasEx10.7: Exercício 7 do capítulo 10 em Dias e Barros (2009). Os
exercício são númerados dentro dos capítulos então adiciona-se o
digito do capítulo para não haver ambiguidade.
* StorkEg2.3.5: Exemplo 2.3.4 do Stork et al. (2011). Para não
confundir Exercício e Exemplo, consideramos abreviar com Eg de
*exempli gratia*.
* BarbinPg52: Tabela sem legenda na página 52 do Barbin (2013). Nesse
caso identifica-se usando a página. No caso de várias tabelas na
mesma página, use mais um digito separado por ponto: Pg52.1 e
Pg52.2.
* PimentelPg142: Dados em Pimentel-Gomes (2009) que estão em tabelas
distribuidas em duas páginas mas não tem legenda, assim usa-se o
número da primeira página.
A prioridade na hora de atribuir a identificação é a seguinte: Tabela =
Quadro > Exemplo = Exercício > Página. Ou seja, se a tabela 5 faz parte
do exemplo 3 que está na página 122, o nome do dataset terá sulfixo
Tb5. Note que uma página pode ter mais de uma tabela, bem como 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 sulfixo Ex ou
Eg se não tiver legenda (Tabela ou Quadro) e só será identificado pela
página se não houver outra alternativa.
## Como formatar as variáveis? ##
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. As
variáveis de nome composto e longo poder ser representadas por siglas, e
as de nome simples mas longo, por abreviação. Veja a tabela com
exemplos.
| Variável resposta | Nome da coluna |
|---------------------------+----------------|
| Dias | dias |
| Idade | idade |
| Renda | renda |
| Produtividade | prod |
| Temperatura | temp |
| Pressão sanguínea | ps |
| Massa seca de parte aérea | mspa |
## O que colocar na documentação? ##
Os datasets devem ter uma documentação precisa. Existem vários campos da
documentação que podem ser usados, no entanto, alguns poucos são
sufícientes minimo. TODO
Abaixo tem-se a documentação do *data.frame* `RamalhoTb4.7`. Embora os campos
sejam praticamente autoexplicativos, segue breve explicação.
* `@name`: o nome do dataset.
* `@title`: título que representa o dataset.
* `@description`: descrição do conjunto de dados. Pode conter mais de
um parágrafo.
* `@format `: forma e conteúdo do dataset. Informa as dimensões e cada
uma das variáveis (nome, descrição, unidade de medida, tipo de
valor).
* `@keywords`: palavras que classificam o dataset, como o tipo de
variável resposta e delineamento (ex: DIC, DQL, contagem,
proporção). Elas aparecem no índice remissivo no manual em PDF.
* `@source`: indica a fonte dos dados. Normalmente é a referência
bibliográfia, a url do endereço de origem ou o nome proprietário dos
dados (indivíduo, grupo ou instituição).
* `@examples`: contém código R que produz gráficos e tabelas com os
dados.
```
#' @name RamalhoTb4.7
#' @title Produção de arrozeiro em função de cultivares
#'
#' @description Produção em função de cultivares de arroz em um
#' experimento instalado em delineamento de blocos casualidados.
#'
#' @format Um data.frame com 30 linhas e 3 colunas.
#'
#' \describe{
#'
#' \item{\code{bloco}}{Blocos do experimento com 3 níveis
#' qualitativos. Sua função é de controle local.}
#'
#' \item{\code{cultivar}}{Fator de interesse com 10 níveis
#' qualitativos. São as cultivares de arroz estudadas no
#' experimento.}
#'
#' \item{\code{producao}}{Produção de arroz medida em cada parcela
#' (kg/ha).}
#'
#' }
#'
#' @keywords DBC arroz
#'
#' @source Ramalho, M. A. P., Ferreira, D. F., & Oliveira,
#' A. C. de. (2005). Experimentação em genética e melhoramento de
#' plantas (2nd ed., p. 322). Editora UFLA. (tabela 7, página 62)
#'
#' @examples
#'
#' library(lattice)
#' data(RamalhoTb4.7)
#'
#' xyplot(producao ~ cultivar, groups = bloco, data = RamalhoTb4.7,
#' ylab="Produção (kg/ha)", xlab="Cultivar")
#'
NULL
```
Por razão ainda desconhecida, títulos com acentos são substituídos por
NA no manual em PDF. Na documentação em HTML, no entanto, e produzida
sem erros.
<!--
<http://ase-research.org/R/>
<http://r-pkgs.had.co.nz/man.html#man-data>
-->
<!------------------------------------------- -->
## Como criar um *branch*? ##
Um *branch* é criado de duas formas, conforme abaixo.
```
# Com duas instruções.
git branch novo # cria
git checkout novo # move
# Com uma instruções 2 em 1
git checkout -b novo
```
## Como criar um *issue*? ##
De uma maneira simples, um *issue* é uma tarefa. Quando você cria um
*issue*, você está documentando algo que precisa ser feito. Essas
tarefas podem ser relacionadas à criação ou correção no seu pacote.
Na página do repositório existe uma entrada chama
[*Issues*](https://gitlab.c3sl.ufpr.br/pet-estatistica/labesData/issues)
no menu esquerdo. Ao entrar nessa página, existe um botão de create
[new issue](https://gitlab.c3sl.ufpr.br/pet-estatistica/iguir2/issues/new?).
Na página de criar um *issue*, você deve preencher os seguintes campos:
* Title: com um título que representa o seu *issue*.
* Description: com uma descrição detalhada do que deve ser feito no
*issue*.
* Assignee: com quem é o responsável pelo desenvolvimento do issue*.
* Milestone: com a marca de milha a que o *issue* pertence, se alguma.
* Labels: com as palavras chaves apropriadas para o *issue*, se
alguma.
Feito isso, clique em *Submit issue*.
## Quanto de trabalho representa um *issue*? ##
É difícil ser preciso nisso, mas aconselha-se que no *labestData* um
*issue* 1) seja o trabalho correspondente a duas horas de dedicação ou,
ainda que o tempo estimado não seja perto desse, que 2) seja uma unidade
característica de trabalho que não vale a pena dividir em mais *issues*.
A última situação ocorre, por exemplo, quando você precisa criar uma
grande função, que demora por volta de 5 horas de trabalho. Uma
dedicação de 2 horas pode não ter uma função pronta que passe nas
verificações de *build*. No primeiro caso, por outro lado, se o trabalho
é texto, por exemplo, mesmo que este esteja incompleto a verificação de
*build* ser verde.
## Como fechar ou editar um issue ##
Para editar, basta acessar o menu
[*Issues*](https://gitlab.c3sl.ufpr.br/pet-estatistica/labesData/issues)
e abrir o *issue* desejado. A edição permite editar praticamente tudo,
embora seja desaconselhado modificar o título e descrição do
mesmo. Deve-se dedicar na hora de atribuir título e descriação para que
sejam apropriados e sem necessidade de mudar.
Na página de um *issue* é possível fazer uma discussão sobre ele, bem
como atribuir a outro colaborador. Quandor o issue for concluído,
deve-se fechá-lo.
## Como fazer mensagens de *commit*? ##
Começar com verbo no imperativo.
## Como criar um *merge request*? ##
Criar um *merge request* (requisição de junção), acesse o menu
[*Merge resquest*](https://gitlab.c3sl.ufpr.br/pet-estatistica/labestData/merge_requests)
e preencha de forma semelhante ao que se faz com o *issue*.
Note que a descrição do *issue* representa o será feito e do *merge
request* o que foi feito.
## Quais as exigências para aceitar um *MR*? ##
Para que um *merge request* seja aceito, 3 condições precisam ser
satisfeitas:
1. O trabalho deve estar concluído. Isso significa de o que previsto
precisa ser cumprido. Em caso de não conclusão, uma justificativa
deve ser dada e aceita. Se o trabalho foi mal dimensionado, abra um
*issue* no futuro para concluí-lo.
2. O *branch* tem que ter *build sucess*. A vantagem, dentre muitas,
da integração contínua, é sabermos se um ramo tem problemas de
código. Se um *branch* não passa nas verificações do *build*,
quando deveria passar, então algo está errado e precisa ser
consertado.
3. O trabalho deve estar em conformidade com o Guia de Estilo de
Código. Ainda que o *branch* esteja verde - com *build status*
positivo - o *merger* (pessoa responsável pelo *merge*) deve
inspecionar o seu código e verificar se está em conformidade com o
Guia de Estilo de Código. Não havendo conformidade, ele vai indicar
as correções a serem feitas.
## Existe um *checklist* para incluir um *dataset*? ##
Na lista que segue abaixo, dados representa o nome do dataset e o
diretório raíz é o `/labestData`.
1. Criar o `dados.txt`. Criar o arquivo texto com os dados no
diretório `./data-raw`. Usar TAB com separador de campo e ponto
como separador decimal.
2. Criar o `dados.rda`. Carregar o `dados.txt` e criar a imagem do
objeto (`*.rda` ou `*.RData`) no diretório `./data`. A forma mais
simples é usar a função `devtools::use_data(dados)`.
3. Fazer a documentação dos dados. Criar o arquivo `dados.R` no
diretório `./R/`.
4. Gerar o arquivo `dados.Rd`. Com o comando `devtools::document()`
gerar os arquivos de documentação que ficam no diretório
`./man`. Use `devtools::check_doc()` para verificar a documentação.
5. Por fim, execute `devtools::check()` e `devtools::build()`. Observe
se ocorrem notificações de `ERROR`, `WARNING` ou `NOTE`. Faça
correções para removê-las.
No final, você deve ter a essa estrutura de diretório abaixo
```
labestData/
|-- DESCRIPTION
|-- NAMESPACE
|-- data-raw/
| `-- dados.txt
|-- data/
| `-- dados.rda
|-- man/
| `-- dados.Rd
`-- R/
`-- dados.R
```
## Existe um *checklist* antes de submeter um MR? ##
1. As atividades do *issue* foram concluídas.
2. O código está de acordo com o Guia de Estilo de Código.
3. O `devtools::check()` e `devtools::build()` executam notificações
negativas.
4. O *branch* passa na integração contínua com *build status*
positivo.
Package: labestData
Title: Conjuntos de Dados para Ensino de Estatística
Version: 0.0-1
Authors@R: as.person(c(
"PET Estatística UFPR <pet.estatistica.ufpr@gmail.com> [cre]",
"Altamiro Antonio Basiewics <alfbasiewics@bol.com.br> [ctb]",
"Angela Luiza Cunha Legey <angelalegey@gmail.com> [ctb]",
"Bruna Davies Wundervald <brunadaviesw@gmail.com> [ctb]",
"Bruno Geronymo <geronymobruno@hotmail.com> [ctb]",
"Daniel Ikenaga <oladani@gmail.com> [ctb]",
"Eduardo Elias Ribeiro Junior <edujrrib@gmail.com> [ctb]",
"Gabriel Sartori Klostermann <gabrielsartori2008@gmail.com> [ctb]",
"Jhenifer Caetano Veloso <jhenicaet@gmail.com> [ctb]",
"Monica Ludmila Hintz De Oliveira <monica.ludmila@gmail.com> [ctb]",
"Paula Alessandra Zeizer Dimas <alessandra.zeizer@gmail.com> [ctb]",
"Alcides Conte Neto <neto_conte@hotmail.com> [ctb]",
"Walmes Marques Zeviani <walmes@ufpr.br> [ctb]",
"Cesar Augusto Taconeli <taconeli@ufpr.br> [ctb]"))
Description: O labestData é um projeto coletivo do PET Estatística UFPR
para desenvolver um pacote R com conjuntos de dados para ensino de
Estatística. Os objetivos desse projeto são 1) capacitar os membros
do PET Estatística a desenvolver pacote R com versionamento Git e 2)
contribuir com a comunidade científica ao reunir, organizar, manter
e disponibilizar conjuntos de dados disponíveis em livros, páginas
de internet e arquivos pessoais.
License: GPL-3
URL: http://gitlab.c3sl.ufpr.br/pet-estatistica/labestData
BugReports: http://gitlab.c3sl.ufpr.br/pet-estatistica/labestData/issues
LazyData: true
Encoding: UTF-8
Depends:
R (>= 3.2.3)
Suggests:
lattice
LICENSE 0 → 100644
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
#' @name PimentelEg5.2
#' @title Competição de variedades de batatinha
#' @description Experimento de competição de variedades de batatinha
#' feito pelo Engenheiro Agrônomo Oscar A. Garay em Balcare,
#' Argentina. O experimento foi realizado em blocos casualizados.
#' @format data.frame com 32 observações e 3 variáveis, em que
#'
#' \describe{
#'
#' \item{bloco}{Fator de 4 níveis qualitativos, usado para
#' controle local.}
#'
#' \item{variedade}{Fator de 8 níveis qualitativos que são as variedades
#' de batatinha.}
#'
#' \item{producao}{Produção de batatinha, em ton ha\eqn{^{-1}}, nas
#' unidades experimentais.}
#'
#' }
#' @keywords DBC batatinha
#' @source Pimentel-Gomes, F. (2009). Curso de Estatístitica
#' Experimental (15th ed.). Piracicaba: FEALQ.
#' @examples
#'
#' library(lattice)
#'
#' xyplot(producao ~ variedade, groups = bloco, data = PimentelEg5.2,
#' type = "b",
#' ylab=expression(Produção~(t~ha^{-1})),
#' xlab="Variedades de batatinha")
#'
NULL
#' @name labestData
#' @title Conjuntos de Dados para Ensino de Estatística
#' @docType package
#' @description O labestData é um projeto coletivo do PET Estatística
#' UFPR para desenvolver um pacote R com conjuntos de dados para
#' ensino de Estatística. Os objetivos desse projeto são 1)
#' capacitar os membros do PET Estatística a desenvolver pacote R
#' com versionamento Git e 2) contribuir com a comunidade científica
#' ao reunir, organizar, manter e disponibilizar conjuntos de dados
#' disponíveis em livros, páginas de internet e arquivos pessoais.
#'
NULL
README.md 0 → 100644
% labestData
% PET Estatística UFPR - <pet.estatistica.ufpr@gmail.com>
> “Without data, you're just another person with an opinion.”
>
>> -- W. Edwards Deming
> “It is a capital mistake to theorize before one has data. Insensibly
> one begins to twist facts to suit theories, instead of theories to
> suit facts.”
>
>> -- Arthur Conan Doyle, Sherlock Holmes
## O que o *labestData*?
O *labestData* é um projeto coletivo do PET Estatística UFPR para
desenvolver um pacote R com conjuntos de dados para ensino de
Estatística.
## Quais são os objetivos do projeto *labestaData*?
O projeto tem dois objetivos principais:
1. Capacitar os membros do PET Estatística (bolsistas e voluntários)
a desenvolver pacote R com versionamento Git;
2. Contribuir com o Departamento de Estatística, e a comunidade
científica em geral, por reunir, organizar, manter e disponibilizar
conjuntos de dados na forma de um pacote R de tal forma que possam
ser usados para o ensino de Estatística.
## Quem são os desenvolvedores do *labestData*?
Os colaboradores do *labestData* são os bolsistas do PET, voluntários e
professores.
| | Tipo | 1 etapa | 2 etapa |
|----------------------------------+------------+---------+---------|
| Alcides Conte Neto | Voluntário | S | - |
| Altamiro Antonio Basiewics | Petiano | S | - |
| Angela Luiza Cunha Legey | Petiana | S | - |
| Bruna Davies Wundervald | Petiana | S | - |
| Bruno Geronymo | Petiano | S | - |
| Daniel Ikenaga | Petiano | S | - |
| Eduardo Elias Ribeiro Junior | Petiano | S | - |
| Gabriel Sartori Klostermann | Petiano | S | - |
| Jhenifer Caetano Veloso | Petiana | S | - |
| Monica Ludmila Hintz De Oliveira | Petiana | S | - |
| Paula Alessandra Zeizer Dimas | Petiana | S | - |
| Walmes Marques Zeviani | Professor | S | - |
| Cesar Augusto Taconeli | Professor | S | - |
## Como fazer para ser colaborar do *labestData*?
Colaborações são muito bem vindas. Para colaborar, entre em contato com
PET Estatística (<pet.estatistica.ufpr@gmail.com>, PC09, 04133613261) ou
com o Tutor (<walmes@ufpr.br>. 04133613573) comunicando a
intenção. Antes, no entanto, leia o Guia de Contribuição:
[CONTRIBUTING.md](./CONTRIBUTING.md).
## Quando é desenvolvido o pacote *labestData*?
O *labestData* foi planejado para ser desenvolvido em duas etapas. A
primeira etapa inicia em 29/02/2016 com duração de 10 semanas (fim em
06/05). A segunda inicia em 01/08/2016 com duração de 7 semanas (fim em
16/09).
## De onde serão obtidos os conjuntos de dados para o *labestData*?
Os dados a serem incluídos no pacote serão provenientes de 4 principais
fontes:
1. Livros. Os livros que exibem aplicações normalmente contém dados em
formas de tabela, em CD-Rom que acompanha o livro, pacote ou em
site com materiais suplementares. Essa será a maior fonte de dados
para o pacote labestData.
2. Internet. A internet está repleta de dados. Existem dados prontos
em formas de tabela (páginas pessoais, orgãos públicos, instiuições
de pesquisa, resultados de enquetes, etc) e também dados não
tabulados/organizados que podem ser capturados (com *web scrap*,
por exemplo) e processados.
3. Arquivos pessoais. Alunos, professores, pesquisadores também podem
disponibilizar os dados de suas pesquisas para inclusão no pacote.
4. Simulação. Embora sejam artificiais, dados proveninentes de
simulação podem ser considerados pois, muitas vezes, são
deliberadamente feitos com uma particular característica relevante
para um problema. No pacote labestData essa será a menor fonte de
dados.
Esses dados serão incluídos no pacote, logicamente, sendo feita uma
referências apropriada da fonte. Se a fonte for livro (site), será
indicado a obra (endereço) de tal forma que as pessoas possam encontrar
o original. Dados de arquivos pessoais também farão referência sobre os
proprietários dos dados, pessoas ou instituições.
## Quais os tipos de dados que serão considerados no *labestData*?
Por razões de conveniência, a primeira etapa do pacote irá priorizar
dados correspondentes às disciplinas de Análise de Regressão Linear
(CE071), Planjamento de Experimentos I (CE213) e Métodos Estatísticos
Multivariados (CE090). No Curso de Estatística da UFPR, essas
disciplinas são ofertadas no primeiro semestre. Na segunda etapa, os
dados irão priorizar as disciplinas de Modelos Lineares Generalizados
(CE225), Controle de Processos Industriais (CE074) e Extensões de
Modelos de Regressão (CE092). Essas disciplinas são ofertadas no segundo
semestre para o Curso de Estatística da UFPR.
Embora sejam esses os contextos de prioridade, dados de outras áreas são
igualmente bem vindos, como dados espaciais, séries temporais, de
análise de sobreviência, de questionário, etc.
Os dados reais devem possuir uma boa descrição das variáveis (nome,
unidade de medida, instrumento de medida usado, definição da unidade
experimental), dos objetivos do experimento/estudo, de algumas hipóteses
preliminares, da forma de condução do experimento/coleta de dados, das
condições de contorno do experimento, etc.
## O que o *labestData* possui além dos conjuntos de dados?
Além dos dados, o pacote possui vinhetas (**vignettes**) com estudos de
caso com os dados do pacote. Essas vinhetas são um guia simples de como
coordenar funções do R para analisar os dados. Embora as vinhetas sejam
para alguns dados, elas servem de inspiração ou roteiro para os demais
dados do pacote.
## Quem pode usar o *labestData*?
O *labestData* é um pacote livre para o uso. O estudante pode usar (e
deve) para praticar a execução de análises, os cientistas podem usar
como referência para análise dos dados de suas pesquisas e os
professores podem usar como ferramenta de ensino. Ao tornar público
qualquer material que use elementos do pacote, solicitamos que faça
citação do mesmo.
## Como citar o pacote *labestData*?
PET Estatística UFPR (2016). **labestData: conjuntos de dados para
ensino de estatística**. R package version x.y-z.
https://gitlab.c3sl.ufpr.br/pet-estatistica/labesData
@Manual{labestData2016,
title = {labestData: conjuntos de dados para ensino de estatística},
author = {PET Estatística UFPR},
year = {2016},
note = {R package version x.y-z},
url = {https://gitlab.c3sl.ufpr.br/pet-estatistica/labesData},
}
**Atenção**: x.y-z deve ser substituído pela versão considerada do
pacote.
## Como usar os conjuntos de dados do *labestData*?
Para usar os conjuntos de dados você precisa instalar o pacote. Existem
duas formas de fazer isso:
1. Instalando o pacote pelos arquivos fonte: você precisar baixar o
arquivo com os fontes (`labestData.tar.gz` para Linux e
`labestData.zip` para Windows) e, de dentro de uma sessão R,
instalar com
install.packages("labestData.tar.gz", repos = NULL)
2. Instalando a partir do endereço do repositório. Para isso você
precisa ter o pacote `devtools` instalado (com todas as suas
dependências). De dentro de uma sessão R, instale com
library(devtools)
install_git("https://gitlab.c3sl.ufpr.br/pet-estatistica/labesData.git")
Depois de instalado, basta carregar o pacote e chamar o conjunto de
dados que deseja usar.
library(labestData) # Carrega o pacote para sessão.
ls("package:labestData") # Lista os objetos do pacote.
data(dados) # Traz para área de trabalho um dataset.
str(dados) # Mostra a estrutura do dataset.
## Como reportar sugestões ou erros ao projeto *labestData*?
Você pode abrir *issues* no projeto *labestData* em dois repositórios:
1. No repositório principal dentro do GitLab do c3sl:
<https://gitlab.c3sl.ufpr.br/pet-estatistica/labesData/issues>.
Apenas usuários com conta no GitLab do c3sl podem abrir *issue*.
2. No repositório espelho no GitHub:
<https://github.com/pet-estatistica/labestData/issues>. Qualquer
usuário do GitHub pode abrir *issue*.
Caso você não tenha conta em nenhum dos dois serviços, nem se interessa
em abrir uma conta, envie sua sugestão/bug para o endereço
<pet.estatistica.ufpr@gmail.com>. Coloque no início título da mensagem
(*subject*) a palavra `[labestData]`, e.g. `[labesData] Dados com número
incorreto de observações`.
% Guia de Estilo R - LEG/PET UFPR
% Walmes Zeviani, Fernando Mayer & Eduardo Jr.
% 01/2016
****
> Ugly code writers will respond, 'my ugly code runs!' That misses the
> point. Coding style is not about make things 'work', is about making
> them work in a way that is undestood by widest possible audience."\
>> -- Paul E. Johnson, R Style. An Rchaeological Commentary.
<!--
<https://cran.r-project.org/web/packages/rockchalk/vignettes/Rstyle.pdf>
<https://google.github.io/styleguide/Rguide.xml>
<http://web.stanford.edu/class/cs109l/unrestricted/resources/google-style.html>
<http://adv-r.had.co.nz/Style.html>
<http://r-research-tool.schwilk.org/handouts/style-guide.html>
<https://github.com/rdatsci/PackagesInfo/wiki/R-Style-Guide>
<http://static.googleusercontent.com/media/research.google.com/pt-BR//pubs/archive/42577.pdf>
<http://ess.r-project.org/>
-->
## Nomes de arquivos ##
Nomes de arquivos R dever ter o sulfixo maiúsculo.
```
# Bom.
script.R
# Ruim.
script.r
```
No entanto, o nome do arquivo não pode ser vago como `script` -- que é
algo óbvio. Use nomes com significado. Se for preciso, use um nome
composto, mas não use espaços nos nomes (nem para diretórios). Dê
preferência para o *undescore* como separador, já que ponto separa a
extensão do nome e traço é separador de palavras compostas
(guarda-chuva, super-homem, ex-aluno).
```
# Bom.
prepara_dados.R
ajusta_modelo.R
# Ruim.
prepara dados.R
ajusta modelo.R
```
As extensões `Rmd`, `Rnw`, `RData`, `Rd` devem ter o R do sulfixo
maiúsculo também, além de nomes não vagos ou óbvios.
Se em um conjunto de arquivos houver relação sequêncial entre eles,
destaque isso no nome. Por exemplo, componha nomes com números
antecedidos de mesmo prefixo.
```
# Bom.
0_prepara_dados.R, 1_ajusta_modelo.R
cap1_introducao.Rmd, cap2_exploratoria.Rmd, ..., cap5_conclusoes.Rmd
```
A vantagem de colocar um prefixo numerado é que os arquivos são exibidos
em sequência no seu navegador de arquivos quando a ordenação for
alfabética. Mas lembre-se que a ordenação é léxica e por isso `cap23*`
aparece antes de `cap4*`. Evite usando `cap04`.
## Nomes de objetos ##
Nomes de objetos devem ter um bom compromisso entre significado e
praticidade. Ou seja, não deve ser curto ao ponto de perder significado
nem longo ao ponto de demorar para escrever. Quanto maior um nome, mais
erramos ao escrevê-lo. Principalmente quando contém acentos, certo?
Portanto, evite nomes que levem acentos (âãàáçêéíôõóú).
Dependendo da classe e da quantidade de objetos na sua sessão
ou pacote, você pode ser mais ou menos verboso (usar nomes maiores ou
menores) na hora de defini-los.
Existem 3 estilos predominantes para escrita de nomes de objetos:
* *dot.case*: é o estilo que usa o separador como ponto. Foi o
primeiro a usado no R e inclusive incentivado. Tem-se várias funções
com esse padrão no R (todas as `read.`, `as.`, `is.`). A mais notáveis
são sa funções método nas quais o ponto separa o nome da a função
genérica da classe o objeto que ela recebe. Por exemplo, `anova.lm` é
a função que retorna o quadro de ANOVA para objetos da classe
`lm`. Nesse caso o ponto tem função além da estética e não pode ser
substituído por nada.
* *snake_case*: é o estilo que usa o *underscore* como separador. O
pacote [devtools], do Hadley Wickham, usa esse padrão. No pacote
[mcglm] esse estilo também foi adotado integralmente. Muitos
consideram um custo digitar o *underscore* ao passo que outros
argumentam que facilita a leitura.
* *camelCase*: é o estilo que usa letras maiúsculas para as iniciais
das palavras com exceção da primeira delas. O pacote [car], do John
Fox, usa esse estilo.
Uma quarto estilo é o *PascalCase* que difere do *camelCase* porque
todas as iniciais são maiúsculas. A mesma função teria os seguintes
nomes em cada caso: *read.table*, *read_table*, *readTable* e
*ReadTable*.
As implementações recentes de pacotes têm evitado o uso do *dot.case*
para nomes de funções por confusões com funções métodos. No entanto, a
reserva do ponto é para as funções método, assim, para objetos não
existe problema.
O importante é que você seja consistente, assuma e mantenha o mesmo
estilo em todo seu pacote ou scritps. Um exemplo de projeto aberto em
que todos seguem o padrão é no Emacs, onde todos os objetos usam o
*dot-case*.
Seja qualquer uma das 3 opções, a diferença só vai existir para objetos
de nome composto, logicamente. Ainda assim, existem padrões usados pela
maioria que distinguem objetos pela sua classe ou uso. Veremos alguns a
seguir.
### Contadores ###
Contadores são variáveis definidas para uso em um *loop*. Para
corresponder aos pseudo-códigos e expressões matemáticas, usa-se uma
letra apenas. As mais usadas são i e j. O nome pequeno, com uma letra, é
interessante também porque é comum o contador do *loop* ser usado para
selecionar frações dos objetos (elementos, linhas, colunas, etc), dentro
dos colchetes simples ou duplos, deixando o código mais claro.
```{r, eval=FALSE}
x <- 1:10
for (i in 1:length(x)) {
x[i] <- sum(x[1:i])+i
}
```
### Matrizes ###
O nome de matrizes geralmente se usa letras maiúsculas, a exemplo do que
se faz nos textos matemáticos. Portanto, são opções imediatas `X`, `Y`,
`K`, `C`, `A`, `L`, `U`, `V`, etc.
IMPORTANTE: Evite usar `c`, `t`, `q`, `T` e `F` como nomes de
objetos. As três primeiras são funções para concatenar vetores, transpor
matrizes e sair do R (*quit*) e as últimas são abreviações de `TRUE` e
`FALSE` (que não recomendamos usar, inclusive).
## Atribuição ##
Faça atribuição de objetos com o sinal de atribuir (`<-`) e não com o
igual. Deixe espaço cercar o operador.
```{r, eval=FALSE}
# Bom.
x <- 1:10
notas <- data.frame(aluno, freq, nota)
# Ruim.
x = 1:10
notas = data.frame(aluno, freq, nota)
# Péssimo.
x=1:10
notas<-data.frame(aluno, freq, nota)
```
O sinal de igual, embora faça atribuição, não deve ser usado para
isso. Reserva-se a passar valores para os argumentos de uma função ou
nomear os elementos de objetos.
```{r, eval=FALSE}
# Nomes que levam certos caracteres devem declarados como string.
notas <- c(Carlos = 95, Lucas = 89, Pedro = 77, "Antônio Augusto" = 60)
```
## Indentação ##
A indentação é um dos requisitos fundamentais de estilo de código. É
praticamente impossível compreender um código se ele não estiver
devidamente indentado. Todo editor de texto voltado para programação tem
recursos de indentação.
A indentação do R é com 4 espaços. Não se usa tabulação. É comum código
com tabulação de 2 espaços, que é inclusive a opção *default* do
[RStudio]. Programadores argumentam que a indentação com 2 espaços
impõe pouca evidência da hierarquia do código, principalmente para
fontes de texto que sejam finas. Além disso, 4 espaços é equivalente a
uma tabulação (que não devem ser usadas). Para mudar o número de
tabulações do [RStudio], vá em `Tools > Global options > Code > Editing`
e em `Tab width` use 4. O [Emacs] usa 4 espaços por *default*.
```{r, eval=FALSE}
# Bom.
for (i in 1:3) {
if (a > 0) {
m0 <- lm(log(y) ~ x,
data = animals[[i]])
} else {
m0 <- lm(y ~ x,
data = animals[[i]])
}
}
# Ruim.
for (i in 1:3) {
if (a > 0) {
m0 <- lm(log(y) ~ x,
data = animals[[i]])
} else {
m0 <- lm(y ~ x,
data = animals[[i]])
}
}
```
## Operadores ##
Deixe espaços ao redor dos operadores lógicos e matemáticos.
* Operadores lógicos: `==`, `!=`, `<`, `<=`, `>`, `>=`, `%in%`, `&`,
`&&`, `|`, `||`.
* Operadores matemáticos: `+`, `-`, `*`, `%*%`, `%%`, `%/%`, `%o%`. Os
operadores `^` e `/` são considerados excessões e não devem ter
espaços. Embora `**` seja um operador equivalente ao `^`, seu uso é
evitado.
Certas situações fogem a regra. Observe abaixo o emprego do sinal de
menos e para o operador `~`, usado em fórmulas.
```{r, eval=FALSE}
# Diferença para o menos de negativo e menos de subtração.
x <- -5 + 2
x <- 2 - 5
x <- -2 * (-3 - 4)
# Fórmulas empregam a mesma ideia.
m <- ~a + b
m <- k ~ a + b
```
Os operador de sequência `:` e os operadores `::` e `:::`, não podem ser
usados com espaços. O mesmo vale para o operador `$`, usado para
consultar listas de data frames, e o `@`, usados para consultar listas
de objetos S4.
```{r, eval=FALSE}
# Uma sequência regular.
12:15
# Criando uma função e chamando de `sum`.
sum <- function(x) print("Olá")
sum(c(98, 67, 14))
# Usando a sum() do pacote base.
base::sum(c(98, 67, 14))
# Com ::: você acessa as funções não exportadas de um pacote. A função
# addterm() do pacote MASS é uma função método cujos métodos não são
# exportados. Para usar tais funções o ver o seu código, é necessário
# 'invadir a privacidade do MASS'.
library(MASS)
ls("package:MASS") # Mostra objetos exportados.
addterm # Tenta ver o corpo da função.
methods(addterm) # Consulta o nome dos seus métodos.
addterm.lm # Tenta mas não encontra a função.
MASS::addterm.lm # Com o namespace diz que não foi exportada.
MASS:::addterm.lm # Com ::: o corpo da função aparece.
# Consulta uma variável em um data.frame.
cars$speed
# Ajusta e consulta elementos na lista de um ajuste.
m0 <- lm(dist ~ speed, data = cars)
names(m0)
m0$coefficients
m0$fitted
```
## Alinhamento vertical de referência (nos operadores) ##
Quando alinhamento vertical (*columnate*) de referência em um operador
der mais clareza ao código, isso pode ser feito.
```{r, eval=FALSE}
altura <- rnorm(100, mean = 1.8, sd = 0.1)
peso <- rnorm(100, mean = 70, sd = 5)
idade <- sample(20:50, size = 100, replace = TRUE)
plot(peso ~ altura,
xlab = "Altura (m)",
ylab = "Peso (kg)",
col = gray(idade/100),
pch = 19)
```
Esse padrão vai exigir mais trabalho e não são muitos os editores que
tem o recurso de indentação por referência. O trabalho de indentar
manualmente e manter isso nas revisões futuras e por colaboradores deve
ter peso na decisão de usar. O [Emacs] tem o recurso de indentação
baseado em expressão regular. Para aplicá-lo aos sinais de igual,
selecione o texto e dê `M-x align-regexp RET = RET`. Você pode, se usar
isso com frequência, criar um *key binding* para uma função que faça
isso no código selecionado.
```
(defun columnate-at-R-assign-operator ()
"Função que alinha a região com a primeira ocorrência de sinais
` <- ' e ` = '. Baseado em:
http://stackoverflow.com/questions/13315064/
marker-does-not-point-anywhere-from-align-regexp-emacs"
(interactive)
(save-excursion
(align-regexp (region-beginning) (region-end)
"\\(\\s-*\\) \\(<-\\|=\\) " 1 1 nil)))
(global-set-key (kbd "C-c a") 'columnate-at-R-assign-operator)
```
## Vírgulas ##
Vírgulas devem ser seguidas de espaço, exceto para as de final de
linha. Elas não dever ser precedidas de espaço, exceto quando precedidas
por outra vírgulas dentro dos colchetes.
```{r, eval=FALSE}
# dput(sample(names(precip), 20))
# Bom.
EyeHairColor[, , 2]
x <- c("Nashville", "Seattle Tacoma", "Wilmington", "Boise", "Raleigh",
"Charleston", "Juneau")
# Ruim.
EyeHairColor[,,2]
y <- c("Nashville","Seattle Tacoma","Wilmington","Boise","Raleigh",
"Charleston","Juneau")
```
## Lagura de texto ##
Assim como a indentação, a largura do texto precisa ser obdecida. Os
editores de R em geral trabalham com duas janelas, em uma o script e na
outra o console. Para trabahar lado a lado é importante não haver
rolamento (*scroll*) horizontal de janela/página. É também mais rápido
navegar no código no sentido vertical, pulando linhas, do que no sentido
horizontal, pulando characteres ou palavras. Isso sem contar que um
texto mais estreito favoresce a compreensão porque, sendo mais vertical,
a hierarquia se torna mais evidente. E por último, um código de linhas
curtas está menos sujeito a quebras de linha acidentais quando enviado
em mensagens, enviados para impressão ou inseridos em processadores de
texto.
Costuma-se usar 80 ou 72 espaços como comprimento máximo de linha, sendo
este último ligeiramente mais adequado para trabalhar com *script* e
*console* lado a lado.
No [Emacs], para comodidade, pode-se habilitar o quebrar linhas
automaticamente (`M-x auto-fill-mode`). Caso não goste, pode apenas
habilidar o destaque com cores para linhas que excedem os limites.
```
;; Define o comprimento máximo de texto para a linha.
(setq-default fill-column 72)
;; Habilita o quebra automática onde ultrapassar.
(setq-default auto-fill-function 'do-auto-fill)
;; Destaca com cores o texto que ultapassa o limite.
(require 'whitespace)
(setq whitespace-line-column fill-column)
(setq whitespace-style
'(face lines-tail trailing spaces tabs empty))
(global-whitespace-mode +1)
```
Na versão corrente do [RStudio] (0.99.467), quebra de linha automática
não está disponível. O que se pode fazer, no entanto, é exibir uma linha
vertical na margem. Para isso, vá em `Tools > Global options > Code >
Display`, habilite `Show margin` e em `Margin column` use 72.
## Quebras de linha ##
Seja automaticamente ou não, para manter seu código dentro das margens
você terá que quebrar linhas. No entanto, não é só pressionar ENTER. A
nova linha deve ser indentada no nível correto -- coisa que editores
para programação fazem automaticamente. A linha quebrada 1) não deve
terminar com espaços ou sinal de igual e 2) deve terminar com operadores
lógicos ou matemáticos para garantir continuidade dessas operações.
Os espaços no final de linha são desnecessários, então evite-os. No
[Emacs] você pode habilitar a remoção automática de espaços de final de
linha (*traling spaces*).
```
;; Habilita removação de espaços de fim de linha quando salva o arquivo.
(add-hook 'before-save-hook 'delete-trailing-whitespace)
```
Terminar linhas com sinal de igual significa que argumento e valor
ficaram em linhas diferentes. Embora não prejudique a execução do
código, evitar isso melhora a legibilidade do código.
Quando for necessário quebrar linhas em meio a operações matemáticas e
lógicas, as linhas tem que terminar com um operador para haver
continuidade da operação.
```{r, eval=FALSE}
# Bom.
mean(precip,
na.rm = TRUE)
# Ruim.
mean(precip, na.rm =
TRUE)
# x será apenas o resultado da soma, que é uma instrução completa.
x <- 2 + 4 + 5
- 3 - 8
# Agora x será o resultado de soma e diferença.
x <- 2 + 4 + 5 -
3 - 8
```
## Comentários ##
Comentários no R são precedidos de `#` em qualquer quantidade. O [Emacs]
[ESS] (*Emacs Speak Statistics* ou *Emacs Statistical System*) usa, por
padrão, dois characteres porque imitou o esquema do `emacs-lisp-mode`
onde o número de caracteres recebe indentação diferente: `#` indenta por
padrão no digito 40, `##` indenta de acordo com o nível do código e
`###` fica sempre colado com a margem esquerda. No [RStudio], no
entanto, não é possível escolher o número de caracteres e sua
indentação. É sempre `#` e alinhado ao código (para quê melhor, muitos
vão dizer). Por isso, vale o denomidador comum e usuários de [Emacs]
podem desabilidar o padrão do [ESS].
```
(add-hook 'ess-mode-hook
'(lambda()
;; Sem estilos de indentação.
(setq ess-indent-with-fancy-comments nil)
;; Usar # para comentários.
(setq-local comment-add 0)))
```
## Divisões de código ##
Uma boa prática, principalmente se seu código é material de ensino, é
fazer divisões nele como se fossem seções de um artigo. Use uma marcação
visual consistente e fácil de manter. Por anos nós usamos réguas com
traços de tamanho 72 digitos. Para diferenciar o nível da divisão,
usamos 3 variações: a maior (para capítulo e cabeçalho) é feita com
sinal de igual (`=`), a média (para seção) é com traços (`-`) e a menor
(para subseção) também, tem comprimento inferior (45 digitos). Criamos
um *key binding* para isso no Emacs por comodidade mas se você usa outro
editor que indique a coluna 72, pressione até preencher com o digito
desejado. Lembre-se de preceder com um `#`.
----------------------------------------------------
Atalho Descrição
-------------- ------------------------------------
`Ctrol-7-1 =` Com o control pressionado digite
71, solte e pressione `=`. Isso vai
repetir o = 71 vezes.
`Ctrol-7-1 -` Idem mas com traço.
`Ctrol-4-4 -` Idem mas repetindo 44 vezes.
----------------------------------------------------
: Atalhos no Emacs e sua descrição para fazer divivões horizontais no
código.
```{r, eval=FALSE}
#=======================================================================
# (Título) Ajuste de modelos não lineares para crescimento vegetal.
#-----------------------------------------------------------------------
# (seção) Conhecendo os dados.
<Carrega os dados, faz gráficos, etc.>
#-----------------------------------------------------------------------
# (seção) Ajuste do modelo logístico.
#-------------------------------------------
# (subseção) Especificação.
#-------------------------------------------
# (subseção) Diagnóstico.
#-----------------------------------------------------------------------
# (seção) Ajuste do modelo de Compertz
<continua>
```
## Linhas em branco ##
As linhas em branco, assim como as divisões horizontais, servem para dar
mais clareza ao código (e fôlego para quem lê/decifra). Entenda o código
como um texto: divida-o em frases, parágrafos, subseções, seções e
capítulos. Os três últimos você pode fazer com as divisões e os dois
primeiros com linhas em branco. Evite usar mais do que duas linhas em
branco seguidas.
## Aspas ##
Use sempre as aspas duplas. Elas são mais visíveis que as simples por
serem mais grossas e não se confundem tão facilmente com a crase. Bons
editores de código tem o destaque de sintaxe (*highlight sintax*) onde
notavelmente as strings ficam de cor diferente (bem como números,
keywords, comentários, etc), mas quando você envia por email ou imprime,
nem sempre as cores acompanham o código. A própria seção Exemplos da
documentação do R, em pdf ou html, é uma prova disso pois o código vai
preto.
Use as aspas simples quando não puder usar as duplas. Esse é o caso
quando se constroí algumas expressões regulares.
## Chaves ##
Ao contrário do que se imagina, existem muitos [estilos de emprego de
chaves]. No R, usamos o K&R no qual a chave que abre é o último
character da linha precedida de espaço e a que fecha fica em linha
exclusiva e indentada conforme o código.
No R usamos chaves nas instruções de *if*, *for*, *while*, *function* e
nas funções *with*, *switch*, por exemplo.
```{r, eval=FALSE}
pitagoras <- function(a, b) {
h <- sqrt(a^2 + b^2)
}
if (object.size(cars) > 1000) {
print("Objeto maior que 1 kb")
} else {
print("Objeto não maior que 1 kb")
}
x <- cars
while (object.size(x) > 1000) {
x <- x[-1, ]
print(object.size(x))
}
```
As chaves podem ser omitidas quando o corpo for de uma linha apenas. Por
outro lado, não recomendamos isso pois a presença das chaves realça a
hierarquia e erros provocados por quebra acidental de linhas são
evitados. Além disso, os editores se baseiam nas chaves para
corretamento indentar o código.
## Colchetes ##
Os colchetes são usados para fazer seleção em objetos. Para objetos com
mais de uma dimensão, como matrizes, *data frames* e *arrays*, usa-se a
regra das vírgulas dentro de uma função: deixe espaço após as
vírgulas. Também recomenda-se separa vírgulas por um espaço.
```{r, eval=FALSE}
# Bom.
HairEyeColor["Black", , ]
HairEyeColor[, c("Blue", "Green"), ]
HairEyeColor[, , -1]
# Ruim.
HairEyeColor["Black",,]
HairEyeColor[,c("Blue","Green"),]
HairEyeColor[,,-1]
```
## Parênteses ##
No R, não se coloca espaço entre os parenteses e seu conteúdo. Existe
espaço ao redor do par de parênteses nas instruções de *if*, *for* e
*while*.
```{r, eval=FALSE}
# Bom.
if (x %% 2 == 0) {
print("x é par.")
}
# Ruim.
if( x %% 2 == 0 ){
print( "x é par." )
}
```
## Ponto e vírgula ##
Ponto e vírgula no R serve para separar instruções na mesma linha,
funcionando como uma quebra visual de linha. No entanto, não se
recomenda o seu uso.
```{r, eval=FALSE}
# Bom.
library(car)
library(gdata)
library(lattice)
# Ruim.
library(car); library(gdata); library(lattice)
```
## Documentação de funções na função ##
Uma prática muito valorizada e útil é documentar as funções que você
cria. A documentação serve de lembrete para você no futuro e é intrução
para as pessoas que usam o seu código. Abaixo a função *baskara* foi
documentada de duas formas diferentes. A primeira é uma forma livre
enquanto que a segunda usa as *tags* do roxygen2. Se você escreve uma
função e tem intenção de incluí-la em um pacote, o segundo padrão é mais
interessante.
Perceba que esse exemplo é bem minimalista pois apenas documenta os
*inputs* e o *output* da função. Na impede de detalhes serem
adicionados.
```{r}
# Função documentada de forma livre.
baskara <- function(a, b, c) {
# a,b,c: (numeric) coeficientes da equação de segundo grau
# a + b * x + c * x^2.
# retorna: (numeric) vetor com as raízes.
r <- (-b + c(-1, 1) * sqrt(b^2 - 4 * a * c))/(2 * a)
return(r)
}
# Documentação com tags do roxygen2.
baskara <- function(a, b, c) {
#' @param a,b,c (numeric) coeficientes da equação de segundo grau
#' \eqn{a + b * x + c * x^2}.
#' @return (numeric) vetor com as raízes.
r <- (-b + c(-1, 1) * sqrt(b^2 - 4 * a * c))/(2 * a)
return(r)
}
```
## Carregando pacotes ##
É comum se ver duas formas de carregar pacote: com `library()` e com
`require()`. Embora o segundo, por ser um verbo, faça mais sentido,
pacotes em scripts devem ser carregados com `library`. A diferença, como
explica [Yihui Xie], é que `require()` tenta carregar um pacote e
retorna *FALSE* se não conseguir enquanto que `library()` retorna
*error* nesse caso.
<!--------------------------------------------- -->
[ESS]: http://ess.r-project.org/Manual/ess.html
[RStudio]: https://www.rstudio.com/
[Emacs]: https://www.gnu.org/software/emacs/
[mcglm]: http://git.leg.ufpr.br/wbonat/mcglm
[car]: http://www.rdocumentation.org/packages/car
[devtools]: http://www.rdocumentation.org/packages/devtools
[estilos de emprego de chaves]: https://en.wikipedia.org/wiki/Indent_style
[Yihui Xie]: http://yihui.name/en/2014/07/library-vs-require/
bloco variedade producao
I Kennebec 9.2
I Huinkul 21.1
I S. Rafalela 22.6
I Buena Vista 15.4
I B 25-50 E 12.7
I B 1-52 20
I B 116-51 23.1
I B 72-53 A 18
II Kennebec 13.4
II Huinkul 27
II S. Rafalela 29.9
II Buena Vista 11.9
II B 25-50 E 18
II B 1-52 21.1
II B 116-51 24.2
II B 72-53 A 24.6
III Kennebec 11
III Huinkul 26.4
III S. Rafalela 24.2
III Buena Vista 10.1
III B 25-50 E 18.2
III B 1-52 20
III B 116-51 26.4
III B 72-53 A 24
IV Kennebec 9.2
IV Huinkul 25.7
IV S. Rafalela 25.1
IV Buena Vista 12.3
IV B 25-50 E 17.1
IV B 1-52 28
IV B 116-51 16.3
IV B 72-53 A 24.6
File added
% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/PimentelEg5.2.R
\name{PimentelEg5.2}
\alias{PimentelEg5.2}
\title{Competição de variedades de batatinha}
\format{data.frame com 32 observações e 3 variáveis, em que
\describe{
\item{bloco}{Fator de 4 níveis qualitativos, usado para
controle local.}
\item{variedade}{Fator de 8 níveis qualitativos que são as variedades
de batatinha.}
\item{producao}{Produção de batatinha, em ton ha\eqn{^{-1}}, nas
unidades experimentais.}
}}
\source{
Pimentel-Gomes, F. (2009). Curso de Estatístitica
Experimental (15th ed.). Piracicaba: FEALQ.
}
\description{
Experimento de competição de variedades de batatinha
feito pelo Engenheiro Agrônomo Oscar A. Garay em Balcare,
Argentina. O experimento foi realizado em blocos casualizados.
}
\examples{
library(lattice)
xyplot(producao ~ variedade, groups = bloco, data = PimentelEg5.2,
type = "b",
ylab=expression(Produção~(t~ha^{-1})),
xlab="Variedades de batatinha")
}
\keyword{DBC}
\keyword{batatinha}
% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/labestData.R
\docType{package}
\name{labestData}
\alias{labestData}
\alias{labestData-package}
\title{Conjuntos de Dados para Ensino de Estatística}
\description{
O labestData é um projeto coletivo do PET Estatística
UFPR para desenvolver um pacote R com conjuntos de dados para
ensino de Estatística. Os objetivos desse projeto são 1)
capacitar os membros do PET Estatística a desenvolver pacote R
com versionamento Git e 2) contribuir com a comunidade científica
ao reunir, organizar, manter e disponibilizar conjuntos de dados
disponíveis em livros, páginas de internet e arquivos pessoais.
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment