9 de juliol de 2015

Índex

  • Parts bàsiques
  • Documentació amb Roxygen2
  • Afegir dades, NEWS, vignette
  • Incloure codi Java i/o C++
  • Test amb el package testthat
  • Control de versions amb git i github

Referències

Les parts bàsiques

  • DESCRIPTION: Informació bàsica del package
  • NAMESPACE: Gestió de les funcions a importar o exportar
  • \man: On s'inclou la documentació
  • \R: On s'inclouen les funcions

El fitxer DESCRIPTION

Package: rugbcn
Version: 0.0-1
Date: 2015-07-09
Title: El primer package a rugbcn
Authors@R: c(person("Lluis", "Ramon", role = c("aut", "cre"),
             email = "lluis.ramonr@some.domain.net"),
          person("Aleix", "Ruiz de Villa", role = "aut"))
Author: Lluis Ramon [aut, cre],
  Aleix Ruiz de Villa [aut]
Maintainer: Lluis Ramon <lluis.ramonr@some.domain.net>
Depends: R (>= 3.1.0), ggplot2
Imports: ggmap
Suggests: MASS
Description: Explicacio mes detallada del que fa el teu package. 
             Perque pot ser util, que permet fer i com.
License: GPL (>= 2)

El fitxer NAMESPACE

Gestió de les funcions a importar o exportar

  • export(function)
  • import(pkg)
  • importFrom(pkg, function)

Els fitxers de documentació

  • Acaben amb .Rd (R documentation)
  • Llenguatge de marques propi semblant a LaTeX
  • Tags per cada secció amb el nom
    • \name, \alias, \title, \arguments,
    • \description, \examples, \usage
  • Per exemple: \title{Quadrat d'un vector d'elements}
  • Es simplifica amb el package Roxygen2

Crear un package amb RStudio

  • File -> New Project -> New Directory -> R Package Type

Exercici

  • Crear el primer package amb un RStudio project
  • Documentar el DESCRIPTION. Afegir packages a Import i Depends.
  • Afegir una funció d'R
  • Documentar la funció
  • Actualitzar el NAMESPACE
  • Build del package. Prova les funcions i mira la documentació.
  • Extra: Executa search(). Hi ha els packages d'Imports o Depends?

Package Roxygen

  • Documentació junt amb el codi
    • Menys incoherències entre documentació i codi
    • Més fàcil de mantenir la documentació
  • Evita deixar tota la documentació al final
  • Actualitza automàticament el NAMESPACE

Funcionament

  • La documentació va precedida per #'
  • Els tags del .Rd tenen equivalents de l'estil @tag
  • Per exemple, \description passa a ser @description
  • Configurar RStudio per generar documentació amb Roxygen2
  • Build -> Configure Build Tools

Funcions comunes

  • @name nom de la funció
  • @title títol de la funció
  • @param nom i explicació dels paràmetres
  • @author autor de la funció
  • @note aclariments o informació complementaria de la funció
  • @export funció a exportar al NAMESPACE
  • @import funcions o packages a importar al NAMESPACE
  • @examples exemples del funcionament de la funció
  • @return explicació del resultat de la funció

Caràcters i text especials

Relacionats amb tag de roxygen, comentari o escapament de \(\\LaTeX\)

  • Per afegir @ usar @@.
  • Per afegir % usar \%.
  • Per afegir \ usar \\.

Incloure negreta, enllaços, codi, etc.

Data

  • Carpeta nova \data
  • Afegir dades en un .RData, .txt, .csv, .R
  • Recomanable fer servir .RData
  • Es carreguen amb la funció data
  • Per exemple: data("mtcars")

Documentar les dades

  • Afegir-ho com a fitxer codi R
  • Acabar-ho amb el nom del dataset. Abans @docType data
  • No afegir @export
#' Mil primers quadrats
#' 
#' Dataset que conte els primers mil quadrats
#' 
#' @format Un vector de longitud mil
#' @source \url{http://www.origen.milQuadrats.cat}
"milQuadrats"

Documentar el package

  • No obligatori però recomanable
  • Crear un fitxer nom-package.R
  • Afegir @docType package
  • Afegir NULL al final
  • Lloc adequat per incloure imports
#' Quadrat
#' 
#' @name quadrat
#' @import ggplot2
#' @docType package
#' @aliases quadrat quadrat-package
NULL

El fitxer NEWS

  • Afegir fitxer amb nom NEWS a l'arrel
  • Sense extensió
  • Utilitzar la funció news(package = "pkgName")

Vignette

  • Crear una carpeta \vignettes
  • Opció vignettes amb Sweave .Rnw
  • Opció vignettes amb Rmarkdown i knitr .Rmd:
    • Cal afegir VignetteBuilder: knitr a DESCRIPTION
    • Cal afegir Suggests: knitr a DESCRIPTION
    • Cal afegir el següent codi al .Rmd
<!-- %\VignetteEngine{knitr::rmarkdown}
     %\VignetteIndexEntry{tutorial_name} -->
  • Fer un Build Source -> Install package_name.tar.gz.
  • browseVignettes(package = 'package_name')

Exercici

  • Actualitzar el codi amb roxygen2
  • Afegir dades al package
  • Documentar les dades amb roxygen2
  • Crear el fitxer de documentació del package
  • Extra: Afegir un fitxer NEWS
  • Extra: Afegir una vignette simple

Incloure codi en JAVA

  • Bona referència: helloJavaWorld package
  • Usar la llibreria rJava
  • Afegir els .jar files a inst/java
  • La documentació dels fitxers java
  • Afegir funció d'R .onLoad:
.onLoad <- function(libname, pkgname) {
  # Load Java dependencies (all jars inside the java subfolder)
  .jpackage(name = pkgname, jars = "*")
}
  • Utilitzar funcions .jnew i jcall per cridar les funcions dels .jar

Incloure codi en C++

  • Al crear package seleccionar el tipus w/ Rcpp
  • Si tens algun dubte pregunta Aleix o Roc.

Package testhat

  • Detallat a l'article de R-Journal
  • Scripts en R i comencen per test-.
  • Guardar-los a la carpeta tests/testthat.
  • Funcions test_that i expect_XXX.
    • On XXX: equal, error, is, true, null, etc.
  • Per exemple:
test_that("Funcionament correcte calQuadrat", {
  expect_equal(calQuadrat(1), 1)
  expect_equal(calQuadrat(2), 4)
})

test_that("Error quan passes no numeric arguments", {
          expect_error(calQuadrat("a"))
})

Control de versions

  • git
    • Dissenyat per Linus Torvalds
    • Usat pel desenvolupament de Linux
    • Fa copies només dels canvis
    • Mantens tot l'històric de canvis
  • github: Servei al núvol de git
  • Per aprendre git i github curs on-line Try-github
  • RStudio integra git, dins opcions de projectes, inclosos els packages.

Gracies