• No se han encontrado resultados

Rgraphics

In document Unidad de Consultoría Estadística (página 83-103)

3. RExcel

5.3. Paquetes

5.3.4. Rgraphics

Véase el curso Statistics 120 - Information Visualisation, por Ross Ihaka (http://www.stat. auckland.ac.nz/~ihaka/120/), especialmente las Lectures. Aborda de una forma muy di- dáctica cómo diseñar gráficos en R.

Se muestra a continuación código fuente como ejemplo de dibujo de mapas, similar al obtenido con el programa PC-AXIS del Instituto Nacional de Estadística(Figura 112).:

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

install.packages ("maptools") require (maptools)

# En el directorio de trabajo se han de encontrar # los siguientes ficheros

# spain_provinces_ind_4.shp

# spain_provinces_ind_4.dbf

# spain_provinces_ind_4.shx

# Puede descargarlos de http://uce.uniovi.es/R #

# Obtenidos de http://www.ine.es/prodyser/pcaxis/pcaxis.htm#1 # ¡Gracias, INE!

# Creación de los datos

provN <- readShapePoly ("spain_provinces_ind_4.shp")

set.seed (123) # por reproducibilidad

x <- runif (52, 5.0, 7.5)

datosprovincias <- data.frame (x=x, codigo=1:52) numerodecortes <- 5

datosshape <- provN@data

datosshape$codigo <- as.numeric (as.character (datosshape$PROV))

datosshape <- merge (datosshape, datosprovincias,

by="codigo", all.x=TRUE)

datosshape$nivel <- cut (datosshape$x, numerodecortes) listacolores <- heat.colors (numerodecortes)

datosshape$colores <- listacolores [datosshape$nivel] datosshape <- datosshape [order (datosshape$OBJECTID,] plot (provN, col=datosshape$colores)

title (main="Mapas en R", sub="Sustituye al PC-AXIS") coordenadas <- data.frame (eje=coordinates(provN),

area=provN@data$AREA, codigo=datosshape$codigo, x=datosshape$x)

coo <- coordenadas [order (coordenadas$area, decreasing=TRUE),] coo <- coo [!duplicated(coo$codigo) & !is.na(coo$x),]

text (coo$eje.1, coo$eje.2,

labels = as.character (round (coo$x, 2)), cex=0.5)

legend ("bottomright", levels(datosshape$nivel), fill=listacolores)

5.3.5. Sweave

Por omisión, las tablas de salida en R aparecen como texto puro. Con un poco de paciencia,

es fácil conseguir que automáticamente se generen empotradas en nuestros documentos de LATEX.

¿Qué conseguiríamos con ello?

Si usted ya conoce LATEX y R, ¿por qué no usarlos a la vez?

Ahorra tiempo: prescinda de copiar y pegar números, tablas y gráficos a mano en sus docu- mentos.

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

\documentclass {article} \usepackage {Sweave} \begin {document}

Sea una muestra de diez individuos con alturas (en cm): <<>>= round (rnorm (10, 170, 9)) @ Y ahora, un histograma: <<fig=true>>= hist (rchisq (1000, 2)) @ \end {document} Figura 113: EjemploTrivial.rnw

Olvídese de rehacer el documento entero cada vez que un cliente le diga: ¡Oiga, tengo datos nuevos! ¿Podría volver a hacer los cálculos?

¡Investigación Reproducible!

(https://www.uzh.ch/cmsssl/biostat/teaching/beratungsseminar/20090205_ SRH_SweaveTemplates.pdf)

En función del procesador de textos que utilice, tiene las siguientes opciones:

LATEX: utilice Sweave. Ofrece dominio absoluto sobre el formato. ¡Es lo mejor!

Ha de escribir un fichero .rnw, muy similar a un fichero .tex. Luego ejecuta la función

Sweavedesde R, y obtiene el fichero .tex listo para ser compilado.

OpenOffice: elija odfWeave. ¿Y en Microsoft Word?

• Use odfWeave y guarde el documento desde OpenOffice con formato Word.

• Use Sweave y convierta el texto a formato .rtf mediante el programa latex2rtf. Power Point: consulte el paquete R2PPT.

Veamos un par de ejemplos de uso de Sweave.

En primer lugar, cree el fichero EjemploTrivial.rnw con el contenido de la figura 113. Para

convertirlo en un fichero de fuente LATEX debe optar por una de las dos opciones siguientes:

Ejecutar en una terminal la orden:

R CMD Sweave EjemploTrivial.rnw Ejecutar dentro de R la orden:

Sweave ("EjemploTrivial.rnw")

En ambos casos asegúrese de que el fichero está en un directorio accesible a R.

Una vez obtenido el fichero EjemploTrivial.tex, compílelo y compruebe el resultado. Como un ejemplo más elaborado, cree el fichero EjemploLaTeX.rnw de forma que contenga el listado que se muestra en las páginas siguientes.

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

\documentclass [12pt,a4paper] {article}

\usepackage [utf8] {inputenc} % acentuación en Ubuntu

% \usepackage [latin1] {inputenc} % acentuación en Windows \usepackage [T1] {fontenc} % silabación de palabras acentuadas \usepackage [spanish] {babel}

\usepackage {graphicx} \usepackage {booktabs} \usepackage {Sweave} \begin {document}

\subsection*{\LaTeX{} y R}

<<echo=false, eval=true, results=hide>>= nombreasignatura <- "Griego"

set.seed (123)

x <- rnorm (100, mean = 5, sd = 3) x <- x [x>=0 & x<=10]

TablaFrecuenciasEnLatex <- function (x, nombreasignatura) {

require (epicalc) require (xtable)

xc <- cut (x, breaks=0:10, include.lowest = TRUE, right = FALSE) cat ("\\begin{tabular}{lrrr}\n")

levels (xc) <- gsub ("\\[", "\\\\hbox{[}", levels(xc)) cat ("\\\\ \\toprule ")

cat (" & Frec. & \\% & Acum. \\% \\\\ \n")

cat (" \\midrule ")

xtabla <- xtable (tab1 (xc, graph=FALSE)$output.table, digits=c(0,0,1,1))

print (xtabla, include.colnames=FALSE, only.contents=TRUE, sanitize.text.function=function(x){x}, hline.after=c(nrow(xtabla)-1)) cat (" \\bottomrule ") cat ("\\end{tabular}\n") cat ("\\hfill") cat ("\\begin{tabular}{c}\n\n" ) cat ("\\includegraphics[width=0.40\\textwidth]{Gr", nombreasignatura, "}\n", sep="") cat("\\end{tabular}\n") } @

\paragraph {Resultados de \Sexpr{nombreasignatura}} <<echo=false, eval=true, results=tex>>=

cat ("Se han presentado a \\textit{", nombreasignatura, "} ", length (x),

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Figura 114: Generando informes automáticos.

" personas, de las que han aprobado el ", round (100 * sum (x >= 5) / length (x), 2),

"\\%, con una nota media de ", round (mean (x), 2),

" puntos (d.t. ", if (length (x) > 1) round (sd (x), 2) else 0, " y mediana ", round (median (x), 2), ").\\newline\n\n\n", sep="")

TablaFrecuenciasEnLatex (x, nombreasignatura) @

<<echo=false, eval=true, results=hide>>=

pdf (paste ("Gr", nombreasignatura, ".pdf", sep="")) hist (x, main=nombreasignatura, xlab="Calificación") dev.off ()

@

\end{document}

<<echo=false, eval=true, results=hide>>= require (tools)

texi2dvi ("EjemploLaTeX.tex", pdf = TRUE) @

Gracias a los últimos renglones, no es necesario ordenar la compilación del fichero LATEX; el propio

R se encarga de ello al ejecutar la orden Sweave (.EjemploLatex.rnw"). Se creará el fichero

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

5.3.6. survey

En el ámbito de las Ciencias Sociales se analizan datos provenientes de encuestas de forma ha- bitual. Estas operaciones estadísticas se basan en diferentes tipos de muestreo (estratificado, con- glomerados, por afijación proporcional, etc.) y requieren para su tratamiento estadístico ponderar, ajustar, elevar... los datos muestrales. Para tratar adecuamente tales bases de datos utilizaremos el paquete survey.

De una forma especial, y dada su amplia utilización, recomendamos los dos enlaces siguientes: La página Survey analysis in R (http://faculty.washington.edu/tlumley/survey/), donde se detallan las técnicas más habituales de análisis, además de ofrecer enlaces muy in- teresantes. Este paquete permite:

• Medias, totales, proporciones, cuantiles, tablas de contingencia, modelos de regresión, modelos loglineales, curvas de supervivencia para la muestra completa y por dominios. • Varianzas por linealización de Taylor o por pesos replicados (BRR, jackknife, bootstrap o

proporcionado por el usuario).

• Muestreo polietápico con o sin reposición.

• Muestreo PPS sin reposición: estimadores de Horvitz-Thompson y Yates-Grundy y varias aproximaciones.

• Posestratificación, calibración generalizada, estimación GREG.

• Diseños en dos fases. Pesos estimados para estimadores IPW aumentados. • Gráficos.

• Soporte para usar datos poliimputados.

• Uso de bases de datos relacionales para conjuntos de datos grandes.

Véase Practical Exemplars and Survey Analysis (http://www2.napier.ac.uk/depts/ fhls/peas/about.asp) de Napier University y National Centre for Social Research, donde se explica de forma muy didáctica

• cómo analizar encuestas complejas mediante distintos programas (R, Stata, SPSS, SAS); • por qué es importante, a la luz de la teoría tras los métodos;

• cuáles son las consecuencias prácticas en ejemplos reales; • cómo tratar la no-respuesta con ponderación o imputación.

Sus tutoriales son excelentes para iniciarse en el análisis de encuestas, además de presentar casos reales (encuestas a hogares).

5.3.7. professR

Su intención es enseñar al usuario cómo preparar y manipular rutinas que diseñan exámenes de respuesta objetiva múltiple para clases grandes donde se requieran varias versiones para evitar que los alumnos se vean tentados a copiar. El programa lee bancos de preguntas de ficheros de texto

puro y crea ficheros LATEX adecuados para su distribución en la clase. También se crean claves de

respuestas. El quid de professR reside en su capacidad de aleatorizar las preguntas y barajar sus respuestas, para generar múltiples versiones de un examen. Una vez que se haya creado un gran banco de preguntas, puede crearse gran cantidad de exámenes distintos, diferentes cada año o revueltos según varias posibilidades.

> library(ProfessR) > vignette("ExamMaker")

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

5.4.

Programación

R es un lenguaje de programación en toda regla, con una sintaxis diseñada para la comodidad del tratamiento y análisis estadístico. En el capítulo siguiente se hará un repaso del lenguaje R. En este capítulo nos centraremos en cómo manipular dicho lenguaje: dónde escribirlo, cómo ejecutarlo, etc.

En la instalación básica de R se incluye una consola y un editor de código. La consola es un bucle leer-evaluar-escribir: se escribe una orden, se pulsa Intro y se obtiene un resultado; y volver a empezar. Si pretendemos escribir más de un renglón de código, conviene abrir el editor de código (menú Archivo → Nuevo script); es una especie de Bloc de notas, con la prestación de que se puede enviar a la consola código para ser evaluado, bien todo (Editar → Ejecultar todo) bien sólo el renglón donde está el cursor o el texto seleccionado (Editar → Correr linea o seleccionar ).

Por su parte, R-Commander refleja en el área de instrucciones el código asociado a las acciones realizadas desde los menús. Dicho código puede modificarse, y volver a ser ejecutado seleccionando con el ratón y pulsando el botón Ejecutar. Sin embargo, es posible que aparezcan problemas, ya que el analizador sintáctico (parser ) de este código es más limitado que el de la consola o el editor nativo de R. Recomendamos usar el área de instrucciones como editor de código sólo si los cambios que se pretenden realizar son pocos y pequeños.

Ninguna de las opciones anteriores permite un trabajo cómodo con código de R. En la sección siguiente presentamos Tinn-R, un editor sencillo pero que incluye prestaciones básicas para la re- dacción de código. Para los usuarios que pretendan pasar muchas horas programando en lenguaje R, aconsejamos echar un vistazo a la extensión ESS (Emacs Speaks Statistics) del editor Emacs.

5.5.

Tinn-R

Se trata de un editor que ofrece resaltado sintáctico, numeración de renglones, ayuda contextual y envío de código al entorno R.

Las secuencias de acciones para ejecutar un comando y definir una función se ilustran en las figuras 115 y 116. Para más detalles, consúltese el apartado 2.5.2 en la página 21.

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

6.

Lenguaje R

R es un lenguaje de programación interpretado. Se trata de un dialecto de S, al igual que Splus,

pero que cuenta con una implementación libre.1

6.1.

Tipos de objetos

En esta sección se realiza una descripción somera de los tipos de objetos2 disponibles en el

lenguaje de programación R, que puede ser útil para interpretar la información que presentan las salidas de Rcommander.

6.1.1. Tipos básicos

Los tipos de valores básicos en R son: lógicos (booleanos), numéricos y cadenas de caracteres.3

Lógicos Las constantes lógicas son TRUE (verdadero) y FALSE (falso). Téngase en cuenta que, en los ejemplos, el símbolo > al principio de una orden es el inductor de la consola de R.

> 1 == 1 [1] TRUE > 1 == 2 [1] FALSE > T [1] TRUE > F [1] FALSE

Téngase en cuenta que T y F son objetos (variables del lenguaje) que valen inicialmente TRUE y

FALSErespectivamente, aunque pueden ser redefinidos.

Cuando se utilizan TRUE y FALSE en operaciones aritméticas, toman respectivamente los valores

1y 0:

> 0 + TRUE [1] 1

1http://www.gnu.org/philosophy/free-sw.es.html.

2Utilizamos aquí la palabra objeto en lugar de dato o variable para evitar confusiones con los datos muestrales y las variables

estadísticas. Somos conscientes de que tal nomenclatura puede producir confusión con el sistema de orientación a objetos incluido en R, pero no se hará alusión al mismo a lo largo de este texto.

3Detallando más, hay tres tipos numéricos (enteros, reales [llamados también dobles o de coma deslizante] y complejos) y

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Números Las constantes numéricas adoptan la notación habitual en informática: punto decimal, notación exponencial o científica...

> pi

[1] 3.141593

> 2e4

[1] 20000

Los operadores aritméticos son los habituales (+, -, *, /, ^ o ** para potencias). Los nombres de las funciones más usuales son los típicos (véanse las tablas a partir de la página 100).

El resultado de una operación matemática puede ser Inf (infinito) o NaN (not a number : no un número): > 3/0 [1] Inf > log(0) [1] -Inf > log(-1) [1] NaN

Queda mencionar la constante NA (not available: no disponible) que indica un valor ausente. Aparece, por ejemplo, al leer campos numéricos vacíos durante la importación de un fichero. Al igual que NaN, tiene comportamiento viral (contagia):

> 3 + NA [1] NA

Caracteres Las cadenas pueden delimitarse por comillas ("nombre") o por apóstrofos ('nombre'), lo cual puede aprovecharse para incluir cómodamente comillas en la cadena sin necesidad de esca- parlas mediante una retrobarra; así, 'Lo llamaban "Trinidad"' equivaldría a "Lo llamaban \"Trinidad\"".

6.1.2. Asignación

La asignación de valores a objetos se realiza mediante los operadores “<-” o “=” (no confundir con el comparador de igualdad “==”). El nombre del objeto puede contener “.” y “_”:

> a <- 8.5

> mi_valor = FALSE > tu.nombre = "Dayana"

6.1.3. Tipos compuestos

Hasta ahora los valores considerados son simples; podrían llamarse átomos o escalares. En R hay también estructuras compuestas, entre las que veremos los vectores, los factores, las matrices, las listas y los dataframes.

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Vectores Podemos crear un vector mediante la función c, que concatena: > b <- c(1, 2, 3, 10)

Los escalares en R son siempre vectores de longitud 1, así que la asignación de a en la sección anterior es equivalente a:

> a <- c(8.5)

Toda la aritmética en R (así como muchas de sus funciones) es vectorial. Por ejemplo, se pueden sumar vectores (aunque no sean de la misma longitud):

> a + b

[1] 9.5 10.5 11.5 18.5

El [1] que aparece al comienzo del renglón es una ayuda para localizar posiciones en vectores largos:

> 10:50

[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [24] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Así, el 32 ocupa la posición vigesimotercera.

En el ejemplo anterior se ha utilizado el operador “:” para crear una secuencia. La función seq generaliza la creación de secuencias:

> seq(0, 3, 0.5)

[1] 0.0 0.5 1.0 1.5 2.0 2.5 3.0

Es útil también la función rep para crear vectores con un elemento repetido: > rep("A", 5)

[1] "A" "A" "A" "A" "A" > rep(c("a", "b"), 3)

[1] "a" "b" "a" "b" "a" "b" Los vectores se pueden concatenar: > bab <- c(b, a, b)

> bab

[1] 1.0 2.0 3.0 10.0 8.5 1.0 2.0 3.0 10.0

pero tenga en cuenta que en un vector todos los elementos han de ser del mismo tipo: > c(bab, "cadena")

[1] "1" "2" "3" "10" "8.5" "1" "2"

[8] "3" "10" "cadena"

Se puede acceder a los elementos de un vector indicando a su vez un vector de subíndices (enteros positivos):

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

> bab[4] [1] 10 > bab[4:6] [1] 10.0 8.5 1.0 > bab[c(4, 6)] [1] 10 1

Si los subíndices son negativos, indican exclusión: > bab[-4] [1] 1.0 2.0 3.0 8.5 1.0 2.0 3.0 10.0 > bab[-(4:6)] [1] 1 2 3 2 3 10 > bab[-c(4, 6)] [1] 1.0 2.0 3.0 8.5 2.0 3.0 10.0

Se puede filtrar usando subíndices lógicos: > bab > 5

[1] FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE

> bab[bab > 5]

[1] 10.0 8.5 10.0

Factores Las variables estadísticas cuantitativas se representan en R mediante vectores numéri- cos; por ejemplo, al aplicar la orden summary (resumen estadístico) al vector definido en el epígrafe anterior se obtiene:

> summary(bab)

Min. 1st Qu. Median Mean 3rd Qu. Max.

1.0 2.0 3.0 4.5 8.5 10.0

Por su parte, las variables estadísticas cualitativas se representan en R mediante factores. Un factor es un vector al que se asocia un vector de niveles o modalidades (que son cadenas de texto). La recopilación de los niveles puede ocurrir automáticamente (por ejemplo, al crear un dataframe) o puede forzarse mediante la orden factor. Por ejemplo:

> mi.vector <- c("varón", "mujer", "mujer", "varón", "varón") > summary(mi.vector)

Length Class Mode

5 character character > mi.factor <- factor(mi.vector) > mi.factor

[1] varón mujer mujer varón varón Levels: mujer varón

> summary(mi.factor) mujer varón

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Matrices Una matriz es la versión bidimensional de un vector. Se puede crear una matriz a partir de un vector datos, con la orden matrix:

> m <- matrix(1:6, nrow = 2) > m

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

> m <- matrix(1:6, nrow = 2, byrow = T) > m

[,1] [,2] [,3]

[1,] 1 2 3

[2,] 4 5 6

Para obtener una submatriz, hay que indicar subíndices para filas y columnas; en blanco, para seleccionar toda la dimensión:

> m[1, 2] [1] 2 > m[1, ] [1] 1 2 3 > m[, 2] [1] 2 5 > m[, 2, drop = FALSE] [,1] [1,] 2 [2,] 5 > m[, 2:3] [,1] [,2] [1,] 2 3 [2,] 5 6 > m[, -1] [,1] [,2] [1,] 2 3 [2,] 5 6

Nótese que hay diferencia entre un vector y una matriz con una sola fila o una sola columna (obtenida con la opción DROP=FALSE).

Se pueden pegar vectores o matrices por columnas mediante la función cbind para formar una nueva matriz:

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

[,1] [,2] [1,] 1 8 [2,] 2 9 [3,] 3 10 > cbind(m, c(100, 200)) [,1] [,2] [,3] [,4] [1,] 1 2 3 100 [2,] 4 5 6 200

o por filas mediante la función rbind: > rbind(1:3, c(8, 9, 10))

[,1] [,2] [,3]

[1,] 1 2 3

[2,] 8 9 10

Se puede trasponer una matriz con la función t, hallar su determinante mediante det, multiplicar matrices con %*%, etc.

Al igual que los vectores, todos los elementos de una matriz han de ser del mismo tipo (homogé- neos): > m[1, 1] <- "nombre" > m [,1] [,2] [,3] [1,] "nombre" "2" "3" [2,] "4" "5" "6"

Arrayes Un array (o tensor) es la generalización de una matriz de dos dimensiones al caso multi- dimensional. Se pueden crear a partir de vectores (como las matrices con matrix) usando la orden array, cuyo primer argumento es un vector de datos y, el segundo, un vector de dimensiones. Los comandos para manejar arrayes son similares a los que manejan matrices.

> x <- array (c (45,46,65,55,170,167,48,49,68,56,169,165), c (2,3,2)) > dimnames (x) <- list (c ("varones", "mujeres"),

+ c ("edad", "peso", "altura"),

+ c ("Villarriba", "Villabajo"))

> x

, , Villarriba

edad peso altura

varones 45 65 170

mujeres 46 55 167

, , Villabajo

edad peso altura

varones 48 68 169

mujeres 49 56 165

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Villarriba Villabajo

edad 46 49

peso 55 56

altura 167 165

> x[,"altura",] # Todas las alturas

Villarriba Villabajo

varones 170 169

mujeres 167 165

> x[,,"Villabajo"] # Datos para la población "Villabajo"

edad peso altura

varones 48 68 169

mujeres 49 56 165

Como las matrices, son homogéneos: > x[1, 1, 1] <- "NS/NC" > x

, , Villarriba

edad peso altura

varones "NS/NC" "65" "170"

mujeres "46" "55" "167"

, , Villabajo

edad peso altura varones "48" "68" "169" mujeres "49" "56" "165"

Listas Para almacenar elementos heterogéneos hay que recurrir a una lista: > l <- list(bab, matrix(1:4, 2), letters)

> l [[1]] [1] 1.0 2.0 3.0 10.0 8.5 1.0 2.0 3.0 10.0 [[2]] [,1] [,2] [1,] 1 3 [2,] 2 4 [[3]]

[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"

Al subindicar con corchetes simples se obtiene una sublista: > l[1]

[[1]]

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

> l[c(1, 3)] [[1]]

[1] 1.0 2.0 3.0 10.0 8.5 1.0 2.0 3.0 10.0

[[2]]

[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"

Al subindicar con corchetes dobles se puede extraer UN elemento de la lista: > l[[1]]

[1] 1.0 2.0 3.0 10.0 8.5 1.0 2.0 3.0 10.0

> l[[1]][4:6]

[1] 10.0 8.5 1.0

Los elementos de una lista pueden tener etiquetas4, en cuyo caso se puede usar dicha etiqueta

entre los corchetes dobles, o utilizar el operador $, para acceder a los elementos de la lista: > n <- list(bab = bab, cadena = "Cadena")

> n[["bab"]]

[1] 1.0 2.0 3.0 10.0 8.5 1.0 2.0 3.0 10.0

> n\$cadena [1] "Cadena"

Dataframes Los dataframes son un tipo de lista que sirve para generalizar a las matrices, en el sentido de que las columnas (que a menudo representan variables estadísticas) pueden ser de tipos diferentes (unas numéricas y otras factores, por ejemplo); sin embargo, todos los elementos de una misma columna deben ser del mismo tipo. Al igual que las columnas de una matriz, todas las columnas de un dataframe deben ser de la misma longitud; lo mismo pasa con las filas. Por tanto, a un dataframe se le pueden aplicar los operadores de listas y los de matrices. Es la estructura esencial para guardar valores de variables estadísticas:

> d <- data.frame(v1 = c(2, 4, 8, 9), v2 = c("v", "v", "m", + "m")) > d v1 v2 1 2 v 2 4 v 3 8 m 4 9 m > d[2, 1] [1] 4 > d[1, ] v1 v2 1 2 v > d[, 2]

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

[1] v v m m Levels: m v > d$v1 [1] 2 4 8 9

Nótese que, al construir el dataframe, el vector de cadenas se ha convertido en factor, es decir, en un vector acompañado de una lista de niveles (modalidades de la variable estadística).

Funciones Un objeto de R también puede almacenar una función: > f <- function(x) x^2

que puede usarse como argumento de otras funciones: > sapply(5:10, f)

[1] 25 36 49 64 81 100

> sapply(5:10, sqrt)

[1] 2.236068 2.449490 2.645751 2.828427 3.000000 3.162278

al igual que las funciones predefinidas de R, como sqrt (raíz cuadrada). Como se ve, la función

sapplyaplica una función a cada elemento de un vector (o lista), y devuelve un vector (o lista) de

resultados.

A partir de aquí se incluye una serie de tablas que contienen muchas de las funciones más habi- tuales en R.

Operaciones lógicas

Función Significado

Operaciones aritméticas: help(“+”)

+ suma

- resta

* multiplicación

/ división

ˆ exponenciación

% % resto división entera

%/ % cociente división entera

Operaciones de comparación: help(“<”)

< menor > mayor <= menor o igual >= mayor o igual == igualdad lógica != distinto

Operadores lógicos: help(“!”)

! negación lógica (NO)

& conjunción lógica (Y)

| disyunción lógica (O)

Unidad de Consultoría

Estadística

Unidad de ConsultoríaEstadística

Funciones matemáticas

Función Significado

Funciones logarítmicas: help(“log”)

log(x) logaritmo natural

log10(x) logaritmo en base 10

log2(x) logaritmo en base 2

logb(x,base) logaritmo en cualquier base

log1p(x) calcula log(1 + x) con precisión para |x|  1

exp(x) función exponencial

expm1(x) calcula exp(x) − 1 con precisión para |x|  1

Funciones trigonométricas: help(“Trig”)

cos(x) coseno sin(x) seno tan(x) tangente acos(x) arcocoseno asin(x) arcoseno atan(x) arcotangente

atan2(y,x) ángulo entre el eje X y el vector del origen al punto (x, y)

Otras funciones matemáticas: help(“abs”)

abs(x) valor absoluto

sqrt(x) raíz cuadrada

Funciones especiales: help(“Special”)

factorial(x) x!

choose(n,x) binomio n sobre x

Operaciones de redondeo: help(“round”)

Función Significado

ceiling(x) redondeo hacia arriba

floor(x) redondeo hacia abajo

round(x) redondeo al más cercano

signif(x) redondeo al número de dígitos significativos especificado

In document Unidad de Consultoría Estadística (página 83-103)

Documento similar