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 existeLa 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 resultadossource() 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 arribaDesafío
FácilEl 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 = "")
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
1Fundamentos de S3
Trabajar con archivosListas con una claseFunciones constructorasMétodos de impresión y formatoValidadores y auxiliaresRepaso: temperaturas4Encapsulación en R
Cierres como objetosEntornos como objetosFunciones de accesoProtección del estadoRepaso: parquímetro2S3 Genéricos y métodos
Genéricos y UseMethodMétodos predeterminadosMétodos para genéricos baseFundamentos de NextMethodRepaso: áreas de figuras5Clases S4
Definición de clases S4Slots y accesoComprobaciones de validezMétodos showRepaso - Catálogo de productos8Clases de referencia
Definición de clases de referenciaMétodos y actualizaciones de camposSemántica de copiaHerencia y callSuperRepaso: cola de tareas11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de R online