5 + 12
[1] 17
Para empezar a usar R, hay que iniciar una sesión de trabajo; esto se se hace a través de RStudio. Al abrir RStudio, lo primero que se observa es un mensaje en la consola, en el que aparece la versión de R que se está ejecutando y alguna otra información general sobre este software.
La consola es la ventana que aparece por defecto en la parte inferior izquierda de RStudio1. Constituye el medio estándar de entrada y salida de texto (información no gráfica). Allí pueden escribirse las instrucciones y allí mismo aparecen las salidas de texto.
El símbolo mayor que (>
), denominado prompt, que aparece en la línea de comandos de la consola, indica que el sistema está preparado para recibir información.
En el código que se presenta en este libro se omite el prompt. Esto facilita el seguimiento interactivo a los ejemplos que se presentan, bastando con copiar el código del libro y pegarlo en la consola o en el editor de scripts de RStudio (cf. sección 2.12).
Sin que se requiera ningún tipo de preparación o ajuste, es posible empezar a usar R, a manera de calculadora, utilizando los operadores aritméticos básicos (+
, –
, *
, /
, ^
). Basta con escribir la operación en la línea de comandos de la consola y presionar EnterEnter. En caso de que la expresión escrita esté conformada por más de dos términos y/o factores, se mantienen las prelaciones usuales, pudiendo, asimismo, usarse paréntesis.
5 + 12
[1] 17
2 * 9 - 4^2
[1] 2
2 * (9 - 4)^2
[1] 50
Cuando se realizan operaciones como las ilustradas anteriormente, los espacios que se incluyan o dejen de incluirse no afectan la ejecución. La manera de escribir las instrucciones es cuestión de estilo (cf. capítulo 22).
En adición a los operadores básicos, R incorpora gran cantidad de funciones. Todas las funciones en R tienen el formato función(argumentos)
. Así, por ejemplo, si se desea obtener el logaritmo natural de 2.71, se escribe en la consola:
log(2.71)
Al presionar la tecla EnterEnter, se obtiene el resultado:
[1] 0.9969486
Entre las funciones matemáticas básicas más comunes, se destacan abs
, sqrt
, log
, exp
, max
y min
.
Aunque la mayoría de los nombres de las funciones en R son muy nemotécnicos, se trata, desde luego, de una nemotecnia basada en el idioma inglés.
Teniendo esto presente, es fácil entender y recordar de dónde proviene, por ejemplo, el nombre para la función que extrae la raíz cuadrada: square root: sqrt
.
R siempre usa el punto como separador decimal, independientemente de la configuración local del equipo. Podría pensarse que, si un equipo está configurado con la coma como separador decimal, la función log(2,71)
arrojaría el logaritmo natural de 2.71; no obstante, el resultado obtenido es el logaritmo de 2 en base 71 (cf. sección 2.4).
Puesto que en español, tanto la coma como el punto son separadores decimales válidos (Ver concepto de la Fundación del Español Urgente-FundéuRAE), se recomienda configurar el sistema para que use el punto como separador decimal. Así quedará unificado el separador decimal de R con el separador decimal de programas como Excel.
Anteriormente se indicó que el formato de todas las funciones en R es función(argumentos)
. Los argumentos son las piezas de información que van dentro del paréntesis. Constituyen los insumos, entradas o parámetros operacionales de las funciones. Cuando una función tiene múltiples argumentos, estos se separan con coma.
Se ha indicado que el punto es el separador decimal en R.
La coma, por su parte, se usa para separar los argumentos de las funciones.
Los argumentos pueden ser obligatorios, en cuyo caso tienen que ser suministrados por el usuario, o implícitos, caso en el que tomarían un valor por defecto, siempre que el usuario no especificara algún otro valor.
La función logaritmo tiene dos argumentos: log(x, base = exp(1))
, siendo x
un argumento obligatorio, correspondiente al número o vector al que se le aplicará la función logaritmo, y base
, un argumento implícito, cuyo valor por defecto es la constante de Napier (2.7182818…).
Al escribir log(2.71)
, se toma 2.71
como argumento principal, y se usa el valor por defecto (la base del logaritmo natural) para el segundo argumento. No obstante, al escribir log(2,71)
, se toma 2
como argumento principal y 71
como la base.
Cada uno de los argumentos de una función tiene un nombre y una posición. Al momento de invocar la función, puede omitirse el nombre de los argumentos, siempre que se respete su posición. Asimismo, los argumentos podrían presentarse en posiciones arbitrarias, siempre que se especificaran sus nombres.
Considérese la función binom.test
, la cual realiza inferencia sobre una proporción binomial. Esta función tiene 5 argumentos, los cuales están definidos en el siguiente orden:
x
: Representa el número de éxitos; no trae ningún valor por defecto.
n
: Representa el número de ensayos independientes Bernoulli; no tiene ningún valor por defecto.
p
: Representa el valor hipotético del parámetro 0.5
.
alternative
: Representa el tipo de prueba, pudiendo ser de dos colas ("two.sided"
, valor por defecto), de cola izquierda ("less"
) o de cola derecha ("greater"
).
conf.level
: Representa el nivel de confianza para el correspondiente intervalo. Por defecto vale 0.95
.
En R se usan comillas para para encerrar cadenas de caracteres, las cuales a menudo actúan como valores de argumentos de las funciones.
Pueden usarse comillas sencillas (por ejemplo: 'greater'
) o dobles (por ejemplo "greater"
).
Desde luego, las de cierre tendrán que coincidir con las de apertura.
Cada uno de los cinco argumentos de la función binom.test
tiene un nombre y una posición predeterminada. Los dos primeros son obligatorios, mientras que los tres restantes traen valores por defecto.
Para ilustrar diversas posibilidades, en cuanto al uso de los argumentos, supóngase que se desea utilizar la función binom.test
, para realizar inferencia sobre el parámetro poblacional
Los valores de los parámetros de la función binom.test
para este ejemplo serían:
x = 185
n = 200
p = 0.9
alternative = "greater"
conf.level = 0.95
Para ejecutar la función binom.test
, debe suministrarse la información de los argumentos x
y n
, que no traen valores por defecto. También es necesario suministrar la información de los argumentos p
y alternative
, puesto que los valores por defecto no corresponden con lo requerido en el presente proceso inferencial. Puesto que el valor por defecto de conf.level
sí coincide con el requerimiento, podría omitirse la especificación de este argumento.
Acorde con lo anterior, cualquiera de las siguientes instrucciones es válida y da lugar al mismo resultado.
binom.test(x = 185, n = 200, p = 0.9, alternative = "greater", conf.level = 0.95)
La anterior es la especificación más completa de los argumentos, aunque no la más eficiente.
Puesto que se está respetando el orden de los argumentos, bien podrían omitirse sus nombres:
binom.test(185, 200, 0.9, "greater", 0.95)
Teniendo en cuenta que el valor por defecto del argumento conf.level
es 0.95
, este argumento puede omitirse:
binom.test(185, 200, 0.9, "greater")
A continuación se muestra una invocación con un orden anárquico para los argumentos que, sin embargo, es adecuada, gracias la especificación de cada argumento mediante su nombre.
binom.test(alternative = "greater", p = 0.9, n = 200, x = 185)
También pueden combinarse opciones. A continuación se muestra una invocación en la que los dos argumentos no se especifican por nombre, sino por posición. Los dos argumentos finales, puesto que no aparecen en el orden que les corresponde, deben especificarse por nombre:
binom.test(185, 200, alternative = "greater", p = 0.9)
Los argumentos de las funciones tienen un nombre y una posición asociada.
Cuando en una invocación, se incluyen argumentos con nombres, estos se usan para el emparejamiento, sin importar la posición que ocupen.
Cuando en una invocación, se incluyen argumentos sin nombre, se usa su posición para el emparejamiento.
Asimismo, es posible usar solo alguna o algunas de las letras iniciales del nombre del argumento, siempre que tales abreviaciones conduzcan unívocamente a un único argumento. Para el ejemplo anterior, podría usarse alguna de las siguientes instrucciones:
binom.test(conf = 0.95, alt = "greater", x = 185, n = 200, p = 0.9)
binom.test(185, 200, a = "greater", c = 0.95, p = 0.9)
Más allá de las múltiples posibilidades que se tiene para invocar una función y del hecho de que —siempre que se sigan las reglas indicadas anteriormente— R la lea y ejecute adecuadamente, es recomendable manejar un formato uniforme y ordenado, que facilite la lectura y depuración por parte del usuario.
En tal sentido, debe procurarse por mantener el orden preestablecido de los argumentos y utilizar las etiquetas necesarias para su comprensión.
El orden de los argumentos refleja la importancia que los desarrolladores le otorgan a estos al momento de escribir la función. Los argumentos obligatorios siempre aparecen al comienzo de la función; al final están los argumentos optativos, los cuales asumen por defecto los valores más usuales.
La escritura u omisión del nombre de los argumentos depende del nivel de familiaridad del usuario con la función. Una instrucción como la que se presenta a continuación resultará suficientemente clara para la mayoría de los usuarios que deseen realizar inferencia sobre una proporción binomial:
binom.test(185, 200, p = 0.9, "greater")
Las ayudas de las funciones presentan los detalles relativos a sus argumentos: nombre, posición, valores por defecto, formato de entrada, etc. (capítulo 7).
R diferencia entre mayúsculas y minúsculas; consecuentemente, a
y A
representarán distintos objetos.
Asimismo, las funciones tienen una manera particular de escribirse, la cual debe respetarse. Por tanto, si se escribe Log(2.71)
, se obtiene un mensaje de error, en lugar del logaritmo natural de 2.71.
La mayoría de las funciones en R se escriben con minúscula; no obstante, esta no es una regla, habiendo funciones, como View
, que se escriben con mayúscula. En otras ocasiones, la función pude combinar mayúsculas y minúsculas, como en TukeyHSD
o leveneTest
.
Cuando el contenido de un vector (cf. sección 8.1) es desplegado en la consola, aparecen indicadores de la posición de sus elementos. Tales indicadores están ubicados en la parte izquierda y van entre corchetes.
Considérense 100 números aleatorios de la distribución Poisson (cf. sección 17), con media
rpois(n = 100, lambda = 130)
Se obtiene el siguiente resultado.
[1] 113 122 119 102 126 128 131 116 115 122 128 121 140 147 141 126 152 141
[19] 126 138 125 131 131 134 137 153 123 137 138 136 126 139 118 143 122 111
[37] 115 118 129 126 129 128 135 153 118 123 115 134 146 143 147 134 134 131
[55] 120 105 134 132 141 136 132 142 127 115 135 112 130 115 130 149 134 122
[73] 142 123 136 123 140 131 141 126 111 127 122 130 150 123 123 127 135 126
[91] 130 123 118 116 119 128 132 143 128 137
El contenido del vector resultante se ajusta al ancho de la consola. En la presente ilustración, la consola despliega 18 elementos a lo ancho.
El valor entre corchetes que aparece encabezando la primera fila indica que 113 es el primer elemento del vector. El valor entre corchetes que aparece en las filas subsiguientes indica la posición que el elemento inicial de cada fila ocupa en el vector. Así, 126 ocupa la posición 19; 115, la posición 37, y 130 ocupa la posición 91.
Si todos los elementos del vector cupieran en una sola fila, únicamente aparecería el indicador [1]; esto es lo usual para resultados que constan de un único valor, como los que se generaron en la sección 2.1.
La función seq
permite generar secuencias numéricas. El primer argumento (from
) indica el primer número de la serie. El segundo argumento (to
) indica el final de la serie. Por defecto, se utilizan intervalos de 1 (by = 1
).
seq(3, 8)
[1] 3 4 5 6 7 8
seq(15, 40, 5)
[1] 15 20 25 30 35 40
seq(0, 1, 0.2)
[1] 0.0 0.2 0.4 0.6 0.8 1.0
seq(10, 2, -2)
[1] 10 8 6 4 2
seq(0.5, 4)
[1] 0.5 1.5 2.5 3.5
Si se usa un único argumento para la función, se asume que se trata del segundo argumento (to
); en tal caso, el primer argumento (from
) toma el valor de 1.
seq(5)
[1] 1 2 3 4 5
El operador “dos puntos” (:
) utilizado entre dos números equivale a la función seq
, en su forma básica, es decir, con el valor por defecto para los intervalos (by = 1
).
5:8
[1] 5 6 7 8
Mediante el argumento length.out
es posible generar una secuencia, especificando el número de valores de la serie, de manera que la longitud del intervalo se calcule automáticamente.
seq(0, 100, length.out = 5)
[1] 0 25 50 75 100
La función rep
permite repetir el primer argumento de la función (x
). El segundo argumento (times
) especifica el número de repeticiones.
rep(5, 3)
[1] 5 5 5
También puede repetirse una secuencia.
rep(2:5, times = 3)
[1] 2 3 4 5 2 3 4 5 2 3 4 5
La instrucción anterior da lugar a la repetición de la secuencia completa tres veces. En contraste, el argumento each
permite repetir cada uno de los elementos de la secuencia un número determinado de veces.
rep(2:5, each = 3)
[1] 2 2 2 3 3 3 4 4 4 5 5 5
Cuando se utilizan simultáneamente los argumentos each
y times
, se realizan primero las repeticiones de los elementos (each
veces) y luego se repite dicha secuencia (times
veces), sin importar el orden en que se escriban estos argumentos.
rep(c("a", "b", "c"), times = 2, each = 3)
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "a" "a" "a" "b" "b" "b" "c" "c" "c"
En R es posible guardar en el ambiente de trabajo cualquier valor, cadena de caracteres o resultado, para su uso posterior, mediante el operador de asignación (<-
).
<- 13
a <- 5 b
Posteriormente, en la misma sesión de trabajo, podrían usarse a
y b
para realizar cualquier cálculo, así:
- b) * 2 (a
[1] 16
<- "magnirostris"
sp nchar(sp)
[1] 12
En RStudio puede generarse el símbolo <-
de manera rápida mediante la combinación de teclas Alt-Alt-
Aunque no es común, también podría realizarse una asignación de izquierda a derecha, así:
13 -> a
También podría usarse la función assign
, la cual tampoco es nada común.
assign("a", 13)
Merece una mención especial el símbolo de igualdad (=
) como operador de asignación.
= 13 a
Aunque en muchas ocasiones el símbolo de igualdad (=
) cumple la misma funcionalidad que el operador de asignación (<-
), hay casos, al evaluar expresiones complejas, en los que solo está permitido el uso del operador de asignación (<-
), no siendo válido el símbolo de igualdad (=
). En adición, por razones de estilo, se aconseja usar siempre el operador de asignación (<-
), reservando el símbolo de igualdad (=
) para la definición de los valores de los argumentos dentro de las funciones (cf. capítulo 22).
Se le denomina genéricamente instrucción al conjunto de caracteres y/o símbolos que al ser ejecutado realiza un proceso. Por lo general, las instrucciones están conformadas por asignaciones y/o funciones.
Al escribir una instrucción es imprescindible respetar la escritura exacta, en lo concerniente al uso de las mayúsculas y las minúsculas. Aunque no hay ninguna restricción en lo que a espacios en blanco se refiere, siendo posible insertar cuantos espacios en blanco se desee (o ninguno), sin que esto afecte la instrucción, existen ciertas convenciones de estilo que es recomendable seguir para hacer el código más legible (cf. sección 22).
Es común que cada instrucción ocupe una línea. No obstante, cuando la instrucción es muy extensa, es posible partirla en dos o más líneas, sin que por ello deje de considerarse una instrucción.
A pesar de que hay bastante flexibilidad en cuanto al sitio por el que puede partirse una instrucción, es necesario observar un par de restricciones.
No puede partirse ninguna palabra, ni aun cuando se trate de dos o más palabras unidas mediante un símbolo (p. e., el punto). Esta restricción también incluye las cadenas de caracteres encerradas entre comillas.
La primera línea debe contener como mínimo el nombre de la función y el paréntesis de apertura, en caso de tratarse de una función, o el nombre del objeto y el operador de asignación, en caso de tratarse de una asignación.
.160 <-
pesopredict(modelo, newdata = data.frame(edad = 160),
interval = "confidence", level = 0.99)
plot(
~ edad, data = reg, main =
peso "Modelo ajustado")
peso.160 <- predict(modelo, newdata = data.frame(edad = 1
60), interval = "confidence", level=0.99)
plot~ edad, data = reg, main = "Modelo
(peso ajustado")
Aunque es posible escribir más de una instrucción por línea, separándolas con punto y coma (;
), se desaconseja esta práctica.
En pro de la legibilidad, se recomienda escribir una única instrucción por línea, separándolas con saltos de línea.
Muy a menudo, se requieren múltiples instrucciones para realizar una tarea. En tales casos, es mucho más práctico organizar el conjunto de instrucciones en un archivo que digitarlas una a una en la consola.
Al conjunto de instrucciones utilizado para la realización de una tarea se le denomina script. Los scripts en R se guardan en archivos de texto con extensión R. La interfaz gráfica de RStudio facilita la creación, carga y edición de scripts.
Para escribir un nuevo script se parte de un documento en blanco. Para su creación, puede usarse el ícono New File , que aparece en la parte superior izquierda de la barra de menús de RStudio, seguido del ícono R Script
. O simplemente, se presiona la combinación de teclas Crtl-Shift-NCrtl-Shift-N.
El nuevo panel de edición de scripts aparece por defecto en la parte superior izquierda del entorno de trabajo de RStudio.
Las instrucciones se escriben en el panel, de la misma forma en la que se escriben en la consola. La tecla EnterEnter genera un salto de línea, a diferencia de lo que hace en la consola, donde ejecuta la orden.
Cada nueva línea se va marcando automáticamente con un número que aparece en una banda vertical a la izquierda del editor de scripts.
En general, en R las instrucciones se ejecutan una a una, de manera secuencial, lo que facilita la depuración de los scripts, al permitir verificar las acciones realizadas por cada instrucción.
Cuando se trabaja desde la consola, basta con escribir la instrucción y presionar la tecla EnterEnter para que se ejecute la correspondiente instrucción.
Si se presiona EnterEnter antes de haber escrito la instrucción completa, aparecerá un símbolo de suma (+
), que indica la necesidad de completarla. En tales casos, la tecla EnterEnter actúa partiendo la instrucción en varias líneas, siendo necesario tener en cuenta lo mencionado sobre particiones correctas e incorrectas (cf. secciones 2.10.1 y 2.10.2).
En ocasiones, se envía una instrucción incompleta de manera inadvertida. Si, en lugar de querer completarla, se quiere escribirla nuevamente, se presiona la tecla EscEsc, con lo cual vuelve a aparecer el prompt.
Para retomar lo escrito previamente, se presiona la tecla flecha_arribaflecha_arriba, que actúa como acceso al historial de las instrucciones enviadas a través de la consola.
Cuando se trabaja desde el editor de scripts de RStudio, puede ejecutarse una instrucción, una región del script o el script completo.
Al presionar la combinación de teclas Ctrl-EnterCtrl-Enter o pulsar el botón Run , se ejecuta la instrucción en la que se encuentre ubicado el cursor o alguna región que se hubiera seleccionado si este fuera el caso.
Para ejecutar todo el script, aunque podría enviarse la orden de ejecución tras seleccionarlo en su totalidad2, es más expedito ejecutarlo —sin necesidad de haberlo seleccionado previamente— presionando la combinación de teclas Ctrl-Shift-EnterCtrl-Shift-Enter, lo que equivale a presionar el botón Source o escribir el comando:
source("ruta/nombre.del.script", echo = T)
Todas las instrucciones que se ejecutan —ya sea desde la consola o desde el editor de scripts— quedan registradas en un historial, lo que posibilita recuperarlas y volver a ejecutarlas.
Para acceder al historial de instrucciones ejecutadas, se elige la pestaña History, que se ubica por defecto en en panel superior derecho de RStudio. Asimismo, pude usarse la combinación de teclas Ctrl-4Ctrl-4.
Para reejecutar alguna instrucción o conjunto de instucciones del historial, se marca y se envía, bien sea a la consola o al editor de scripts.
Puede enviarse a la consola, presionando EnterEnter o usando el ícono To Console .
Para enviarla al editor de scripts, se presiona la combinación de teclas Shift-EnterShift-Enter o se elige el ícono To Source .
Una vez se tenga la instrucción o conjunto de instrucciones en la consola o en el editor de scripts, puede reejecutarse, tal y como se indica al inicio de esta sección.
En R existen dos modos de ejecución: a través de la consola (también denominado modo interactivo) y a través del editor de scripts.
El trabajo a través de la consola puede agilizar la realización de operaciones únicas y puntuales, que no sea necesario volver a realizar en futuras sesiones de trabajo, tales como un cálculo aritmético o la obtención de alguna probabilidad o de algún valor crítico.
Para la otra gran mayoría de casos —y muy particularmente para el análisis de datos— se trabaja en modo script, el cual, además de hacer más cómoda la ejecución, permite guardar el conjunto de instrucciones en un archivo. Esto facilita compartir los análisis y les brinda trazabilidad, dejando abierta la posibilidad de su ampliación o modificación futura.
En adelante, se supondrá que la escritura y ejecución de instrucciones se realizan desde un script.
Al igual que todos los lenguajes de programación, R admite comentarios, esto es, cadenas de texto que se insertan a manera de guía, para referencia del usuario, sin que tengan ningún efecto en los procesos realizados.
Cualquier cadena de texto que inicie con el símbolo numeral (#
) constituye un comentario. Asimismo, puede usarse el símbolo #
para desactivar temporalmente alguna línea que no se desee ejecutar dentro de un script.
Los comentarios pueden ocupar una o más líneas completas, pero también pueden ir al final de una línea que tenga código ejecutable.
Es posible adaptar los comentarios para que el editor de scripts de RStudio los tome como marcadores de sección, facilitando la navegación a través del script. Cualquier cadena de caracteres que inicie con al menos un símbolo numeral (#
) y que finalice con al menos cuatro símbolos numeral (####
) funcionará como tal. Equivalentemente, podría finalizarse con cuatro o más guiones (----
).
Así, la inclusión de una línea como la siguiente en un script se reflejará en el panel de marcadores inferior.
# Predicciones ------------------------------------------------
Podrá accederse a tales marcadores desde la parte inferior de la ventana del editor de scripts.
Asimismo, cuando se trabaja en RStudio, puede accederse al panel de marcadores lateral presionando el botón Outline , el cual se ubica en la parte superior derecha del panel del script, o presionando Ctrl+Shift+OCtrl+Shift+O.
Aunque los comentarios no son interpretados por R, su inserción genera orden y facilita la comprensión los scripts, por lo que se recomienda usarlos generosamente.
Para desactivar rápidamente un bloque de instrucciones, de manera que no se ejecute en un script, basta con seleccionarlo y presionar las teclas Ctrl-Shift-CCtrl-Shift-C, con lo cual se anteponen marcas (#
) a cada una de las líneas del bloque. La misma combinación de teclas retira las marcas (#
) del bloque seleccionado.