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 solo existe después de que se haya cargado el archivo que la define, así 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() ya existeLa disposición habitual es una clase por archivo, cuyo nombre coincide con el de la clase: Account.R contiene el constructor account y sus métodos, Shape.R contiene los genéricos 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 en la parte superior, en el orden correcto. El editor muestra cada archivo como una pestaña.
Shape.R # funciones genéricas compartidas por todas las figuras: cárgalo primero con source
Circle.R # la clase circle y sus métodos
main.R # source("Shape.R"); source("Circle.R"); lee la entrada e 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 del último archivo cargado con source(). Un valor en su propia línea en un archivo cargado con source() tampoco se imprime, así que los archivos que deban mostrar algo llaman a cat():
# Tools.R
total <- 0 # una variable global una vez cargado el archivo
42 # source() no lo imprime
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # cargado después: reemplaza la función helper anteriorDesafí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 proporcionado: mantenlo 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