<- "¡Hola, Mundo!"
a <- 3
b <- 5
d cat("==========================================\n")
cat(" RESULTADOS \n")
cat("==========================================\n\n")
cat("El valor de b es ", b, ", mientras que d vale ", d, ".\n\n", sep = "")
cat("La suma entre ellos es igual a ", b + d, ".\n\n", sep = "")
cat("Este es un saludo:", a)
20 Ejecución de scripts de R desde la terminal
En este capítulo aprenderemos a ejecutar scripts de R directamente desde la terminal, una habilidad esencial para automatizar tareas y trabajar de manera más eficiente. Si bien RStudio y otros entornos gráficos son herramientas poderosas, ejecutar scripts desde la terminal ofrece ventajas importantes, como mayor rapidez, control sobre el entorno y la capacidad de automatizar procesos sin depender de interfaces gráficas. Hacer esto es necesario cuando tenemos que programar alguna tarea de gran escala que se ejecutará de manera remota en algún servidor o cuando necesitamos encapsular nuestro programa para que otros lo puedan correr sin siquiera saber nada de R.
20.1 Requisitos
Para poder ejecutar scripts de R desde la terminal de Windows, necesitamos:
1. Editar la variable de entorno PATH
Cuando queramos correr un programa de R usaremos el comando Rscript
. Por default, la terminal lo desconoce, porque se trata de un programa que se agregó en nuestra computadora el día que instalamos R. Por eso necesitamos indicarle al sistema operativo que Rscript
es un comando que se instaló con R y que lo puede encontrar en la carpeta de los archivos de instalación del programa R. Esto hay que hacerlo una sola vez por computadora editando las variables de entorno de Windows, que son cadenas de texto que contienen información acerca del sistema. Se logra siguiendo estos pasos:
Fijarse en qué carpeta de la computadora está instalado R. Seguramente lo encuentres si, abriendo el explorador de archivo, vas siguiendo este camino:
Este equipo > Windows (C:) > Archivos de programa > R > R-version > bin
. En esta carpeta tiene que haber dos archivos, llamadosR.exe
yRscript.exe
. Si es así, hacé clic con el botón derecho del mouse sobre cualquiera de ellos, luego en “Propiedades” y copiá el path que aparece en “Ubicación” (deberías copiar algo comoC:\Program Files\R\R-4.4.3\bin
). También podés copiar el path que se ve arriba en la barra de navegación.Hacer clic en “Inicio” (logo de Windows de la barra de tareas) o presionar la tecla Windows del teclado, escribir “Entorno” y hacer clic en la opción “Editar las variables de entorno del sistema”.
Hacer clic en el botón “Variables de entorno” (abajo).
En el cuadro “Variables del sistema” (abajo), hacer clic en la variable “Path” y luego en “Editar”.
Hacer clic en “Nuevo”, pegar la dirección copiada antes (por ejemplo,
C:\Program Files\R\R-4.4.3\bin
) y darEnter
.Luego, hacer clic en “Aceptar” tres veces para confirmar y cerrar todo.
2. Abrir la terminal y cambiar el directorio de trabajo
A la hora de ejecutar un script desde la terminal, tenemos que cambiar el directorio de trabajo a la carpeta en la cual está guardado, con el comando cd
. Luego, ejecutamos el comando Rscript nombre_archivo.R
. Si no queremos cambiar el directorio de trabajo, debemos escribir el path completo hacia el script, pero esto es menos cómodo (por ejemplo: Rscript C:\Users\Documents\nombre_archivo.R
).
Los scripts utilizados en los ejemplos de esta unidad pueden ser descargados desde este archivo comprimido y ubicados de forma ordenada en algún lugar de la computadora, idealmente en la carpeta destinada para esta unidad, como se muestra en la siguiente imagen.
20.2 Ejecución de programas sin interacción del usuario
Empezaremos con el ejemplo propuesto por el script mi_programa.R
que tiene este contenido:
Todo lo que en el programa está encerrado en una llamada a la función cat()
es lo que se mostrará como mensajes en la terminal cuando el script sea ejecutado. En una terminal abierta y habiendo cambiado el directorio hacia la carpeta donde está guardado el script, utilizamos el comando Rscript mi_programa.R
y veremos el siguiente resultado:
20.3 Ejecución de programas interactivos
Correr scripts desde la terminal nos permite crear programas interactivos, que soliciten información al usuario y actúen en función de esa entrada. Este enfoque es particularmente útil cuando necesitamos que el usuario proporcione datos específicos o haga elecciones durante la ejecución del programa, sin depender de interfaces gráficas complejas. Al usar funciones de R como scan()
, podemos diseñar scripts que personalicen su comportamiento según las respuestas del usuario.
Por ejemplo, el script saludo.R
preguntará al usuario “¿Cómo te llamás?” y luego responderá con un saludo. Su contenido es:
cat("***************************************\n")
cat("¿Cómo te llamás?\n> ")
<- scan(file = "stdin", what = character(), n = 1, quiet = TRUE)
nombre cat("¡Hola, ", nombre, "!\n", sep = "")
cat("***************************************\n")
La función scan()
es la que permite escanear o leer valores que los usuarios ingresen por la terminal. Sus argumentos incluyen:
file
: especifica desde donde se lee la información. Debemos setearlo comofile = "stdin"
porque vamos a leer información desde la terminal.what
: determina el tipo de dato a leer, generalmente un valor numérico o una cadena de texto. Si queremos leer un número, no es necesario usarlo, ya que por default se tienewhat = double()
y hace eso. En cambio, si queremos leer texto, como en este ejemplo, debemos indicarwhat = character()
.n
: cantidad de valores a leer (uno solo en el ejemplo).quiet
: valor lógico que determina si la función opera escribiendo detalles adicionales en la consola (FALSE
, valor por defecto, no lo desemos) o de forma silenciosa, sin escribir nada adicional (TRUE
, es lo que queremos).
Cuando ejecutamos este script, vemos:
Pasamos a otro ejemplo. El siguiente script le pide a la persona que lo esté usando que indique cualquier número y luego le comunica si es par o impar:
cat("==========================================\n")
cat(" PARIDAD DE UN NÚMERO \n")
cat("==========================================\n\n")
cat("Ingrese un número entero y presione enter:\n")
<- scan(file = "stdin", n = 1, quiet = TRUE)
n if (n %% 2 == 0) {
cat(n, "es par\n")
else {
} cat(n, "es impar\n")
}
Esto es lo que ocurre en la terminal:
Ahora recordemos el ejercicio de la práctica 2 en el que escribimos un programa para calcular salarios, en función del día de la semana, el turno y las horas trabajadas. Podemos adaptarlo para esta información de la que depende el cálculo final se tome desde la terminal:
# PROGRAMA: "Determinar salario"
# Valores fijados
<- 4000
valor_hora <- 2000
valor_adicional_noche <- 1000
valor_adicional_domingo
# Pedir valores para calcular el salario
cat("Ingrese la cantidad de horas trabajadas:\n")
<- scan("stdin", n = 1, quiet = TRUE)
horas cat("\nIngrese el día de la semana (DOM LUN MAR MIE JUE VIE SAB):\n")
<- scan("stdin", what = "", n = 1, quiet = TRUE)
dia cat("\nIngrese el turno (M T N):\n")
<- scan("stdin", what = "", n = 1, quiet = TRUE)
turno
# Cálculo para el pago de ese día a ese empleado
<- horas * valor_hora
salario if (turno == "N") {
<- salario + horas * valor_adicional_noche
salario
}if (turno == "DOM") {
<- salario + horas * valor_adicional_domingo
salario
}cat("\nEl salario que se debe abonar es $", salario, "\n", sep = "")
Ejecutamos el script salario.R
: