Menu
Coddy logo textTech

Trabajar con archivos

Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 1 de 57.

Los programas reales se dividen en varios archivos. En R, source("Greeting.R") ejecuta otro archivo de principio a fin, y todas las funciones que define ese archivo están disponibles después:

# Greeting.R
greeting <- function(name) {
  paste0("Hello, ", name, "!")
}

# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")

Al ejecutar main.R se imprime Hello, Ada!: la línea source() carga greeting() antes de que main.R la llame.

El programa comienza en el archivo que ejecutas, aquí main.R, y R lo lee línea por línea. El orden importa: una función existe solo después de haber cargado el archivo que la define, por lo que las líneas source() van al principio:

# main.R
cat(greeting("Ada"), "\n")   # Error: no se pudo encontrar la función "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n")   # funciona: greeting() ahora existe

La estructura habitual es una clase por archivo, con el nombre de la clase: Account.R contiene el constructor account y sus métodos, y Shape.R contiene los genéricos de shape. En los desafíos de esta sección, tu código va en esos archivos, y main.R contiene el código de entrada/salida proporcionado, con las líneas source() ya colocadas al principio en el orden correcto. El editor muestra cada archivo como una pestaña.

Shape.R      # genéricos compartidos por cada forma: cárgalo primero
Circle.R     # la clase circle y sus métodos
main.R       # source("Shape.R"); source("Circle.R"); lee la entrada, imprime los resultados

source() ejecuta un archivo en el entorno global, por lo que sus funciones y variables se convierten en nombres globales. R no tiene nombres privados de archivo: si dos archivos definen helper(), prevalece el archivo cuya fuente se cargue en último lugar. Un valor que aparece por sí solo en una línea de un archivo cargado con source() tampoco se imprime, por lo que los archivos que deban mostrar algo llaman a cat():

# Tools.R
total <- 0                 # una variable global una vez sourced
42                         # no impreso por source()
helper <- function(x) x * 2

# Other.R
helper <- function(x) x + 1   # sourced más tarde: reemplaza el helper de arriba
challenge icon

Desafío

Fácil

El programa tiene dos archivos. main.R carga Greeting.R, lee nombres e imprime el resultado de greeting(name) para cada uno. Completa greeting() en Greeting.R para que devuelva Hello, Ada! para el nombre Ada, o Hello, friend! cuando el nombre esté vacío.

Tu código va en Greeting.R. main.R contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

source("Greeting.R")

# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online