diff --git a/cap06.Rmd b/cap06.Rmd index 3d21009f82ca66f692272269deb4a1e5065fbbc7..9dda67b20736fe7a50ad67201d1ea9747bb2f0ae 100644 --- a/cap06.Rmd +++ b/cap06.Rmd @@ -16,3 +16,175 @@ source("config.R") rty <- "md" ``` +# Adicionando vinheta # + +<!---------------------------------------------------------------------- --> +Brainstorm + +Vignette - vinheta - esboço - episódio. + + * <http://r-pkgs.had.co.nz/vignettes.html> + * <http://kbroman.org/pkg_primer/pages/vignettes.html> + * <http://yihui.name/en/2012/09/r-package-markdown-vignettes/> + * <https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Writing-package-vignettes> + * <http://rmflight.github.io/posts/2014/07/vignetteAnalysis.html> + * <http://www.stats.uwo.ca/faculty/murdoch/ism2013/5Vignettes.pdf> + * <https://www.statistik.lmu.de/~leisch/Sweave/Sweave-Rnews-2003-2.pdf> + * <http://www.magesblog.com/2012/01/survey-writing-package-vignette.html> + * <https://tagteam.harvard.edu/hub_feeds/1981/feed_items/1395647> + * <https://stat545-ubc.github.io/packages00_index.html> + * <https://cran.r-project.org/web/packages/knitr/vignettes/knitr-markdown.html> + +O jeito antigo de fazer pacote: + + * <http://biostat.mc.vanderbilt.edu/wiki/Main/HowToCreateAnRPackage> + * <http://leg.ufpr.br/~paulojus/embrapa/Rembrapa/Rembrapase37.html> + +O que são as vinhetas? + + - Documentação extendida do pacote? De certa forma sim. + - Uma documentação menos pontual e mais geral? Sim. + - Substitui um artigo? Não, pois artigos não exibem código; + - É uma propaganda do pacote? Sem dúvida. + - A melhor forma de apresentar uma introdução geral do pacote. + - Pode dar detalhes técnicos que não caberiam na documentação. + - Pode demonstrar aspectos que não documentação não seria possível + porque lá só tem código de input. + - Uma vinheta é livre para ter figuras, links, gifs, tabelas, listas, + até app shiny e gráficos dinâmicos como o googleVis. + +Elas ficam no diretório `vignettes/`. São parte do sistema de +ajuda/documentação do pacote. + +As entradas com % no YAML são ignoradas pelo LaTex e processadas pelo R +para gerar links na home da documentação (suponho). + +A vantagem do HTML é que uma index pode dar acesso às várias vinhetas de +um pacote. Torna fácil para o usuário iniciante. + +```{r, eval=FALSE} +## Exibe as vinhetas disponíveis. +vignette() + +## Acessa uma vinheta. +vignette("lala") + +sistem.file("lala", package="lulu") + +browseVignettes("YourPackage") +``` + +<!---------------------------------------------------------------------- --> + +A coisa que mais fácil ajuda você a conhecer as funcionalidades de um +pacote é sem dúvida a sua vinheta (*vignette*). Um pacote pode ter +várias vinhetas, cada uma exibindo um tema diferente de funcionalidades. + +Produzir a vinheta de um pacote é tão fácil quanto as demais partes +dele. Usaremos os recursos disponíveis no *devtools* mais uma vez. + +A vinheta será escrita em +`r renderUrl("RmarkDown","http://rmarkdown.rstudio.com/",rty)`. Escrever +vinhetas têm uma excelente +`r renderUrl("documentação","http://r-pkgs.had.co.nz/vignettes.html",rty)`. + +A vantagem de escrever em MarkDown é a velocidade, praticidade e poder +obter vinhetas em html e pdf facilmente. + +```{r, eval=FALSE, include=FALSE} +## DESCRIPTION antes do use_vignette(). +cat(readLines("./meupacote/DESCRIPTION"), sep = "\n") +``` +```{r, eval=FALSE} +library(devtools) + +## Cria a primeira vinheta do pacote. +use_vignette("minhaVinheta1") +``` +```{r, echo=FALSE} +if (file.exists("./meupacote/vignettes/minhaVinheta1.Rmd")){ + file.remove("./meupacote/vignettes/minhaVinheta1.Rmd") +} +library(devtools) +use_vignette("minhaVinheta1", pkg = "./meupacote/") +``` +```{r, echo=FALSE} +## DESCRIPTION depois do use_vignette(). +cat(readLines("./meupacote/DESCRIPTION"), sep = "\n") +``` + +O comando `use_vignette()` cria o diretório `vignettes/` com um arquivo +`.Rmd` com o nome que você usou. Além disso ele adiciona ao campo +`Suggests` no `DESCRIPTION` os pacotes `knitr` e `rmarkdown`, +necessários para gerar a vinheta. + +```{r, echo=FALSE} +## Mostra diretório e arquivos criados. +cat(system("tree --charset=ascii ./meupacote/ | head -n -2", + intern = TRUE), sep = "\n") +``` + +Esse arquivo é criado já com conteúdo para poder orientá-lo. No topo do +arquivo tem uma parte de meta dados escrita em YAML (*yet another markup +language*) que detalha as informações do documento e definem o processo +de sua criação. + +```{r, echo=FALSE} +## Mostra o YAML da vinheta original. +cat(readLines("./meupacote/vignettes/minhaVinheta1.Rmd")[1:10], + sep = "\n") + +## Nada entrou no .Rbuildignore. +## cat(readLines("./meupacote/.Rbuildignore"), +## sep = "\n") +``` + +Edite à vontade esse arquivo fazendo a melhor propaganda possível do seu +pacote. Tome cuidado com os pacotes que vai usar. É indicado que eles +estejam nos campos do seu `DESCRIPTION`, senão no `Imports`, pelo menos +no `Suggests`. Abaixo o arquivo que criamos, que está muito simples, +logicamente, mas é apenas para marcar território mesmo. + +TODO trocar essa vinheta por uma da função `baskara()` com os métodos. + +```{r, include=FALSE} +file.copy(from = "aux/minhaVinheta1.Rmd", + to = "meupacote/vignettes/minhaVinheta1.Rmd", + overwrite = TRUE) +``` +```{r, echo=FALSE, comment=NA} +## Mostra a vinheta mínima. +cat(readLines("./meupacote/vignettes/minhaVinheta1.Rmd"), + sep = "\n") +``` + +Para produzir a vinheta, use o comando `build_vignettes()`. Ele vai +gerar as vinhetas de cada arquivo e levá-las para outro diretório, como +pode ser visto abaixo. Caso você não tenha um dos seguintes pacotes: +`evaluate`, `formatR`, `highr`, `knitr`, `mime`, `stringi`; será +necessário instalá-los. + +```{r, eval=FALSE} +build_vignettes() +``` +```{r, eval=FALSE, echo=FALSE, comment=NA, highlight=FALSE} +## FIXME: Não existe como sair desse erro! De usar o output do +## build_vignettes(). +x <- capture.output(build_vignettes("./meupacote/")) +cat(x, sep = "\n") + +sink("aux.txt") +build_vignettes("./meupacote/") +sink() +``` +``` +Building meupacote vignettes +Moving minhaVinheta1.html, minhaVinheta1.R to inst/doc/ +Copying minhaVinheta1.Rmd to inst/doc/ +``` + +TODO Incluir a vinheta do `pitagoras()` ou outra funcionalidade com +output em PDF. + +Por fim, basta executar `check()` e `build()` mais uma vez para incluir +as vinhetas no `.tar.gz` do seu pacote.