Lavorare con i file
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 1 di 57.
I programmi reali sono suddivisi in diversi file. In R, source("Greeting.R") esegue un altro file dall'inizio alla fine e, in seguito, sono disponibili tutte le funzioni definite in quel file:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Eseguendo main.R viene stampato Hello, Ada!: la riga source() carica greeting() prima che main.R la chiami.
Il programma inizia nel file che esegui, qui main.R, e R lo legge riga per riga. L’ordine è importante: una funzione esiste solo dopo che è stato caricato il file che la definisce, quindi le righe source() vanno all’inizio:
# main.R
cat(greeting("Ada"), "\n") # Errore: impossibile trovare la funzione "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # funziona: greeting() ora esisteDi solito c'è una classe per file, con il nome della classe: Account.R contiene il costruttore account e i suoi metodi, Shape.R contiene i generici shape. Nelle sfide di questa sezione, il tuo codice va inserito in quei file, mentre main.R contiene il codice di input/output fornito, con le righe source() già presenti in cima nell'ordine corretto. L'editor mostra ogni file come una scheda.
Shape.R # funzioni generiche condivise da tutte le forme: esegui prima il sourcing di questo file
Circle.R # la classe del cerchio e i suoi metodi
main.R # source("Shape.R"); source("Circle.R"); legge l'input, stampa i risultatisource() esegue un file nell'ambiente globale, quindi le sue funzioni e variabili diventano nomi globali. R non ha nomi privati dei file: se due file definiscono helper(), prevale quello dell'ultimo file caricato con source. Anche un valore su una propria riga in un file caricato con source non viene stampato, quindi i file che devono mostrare qualcosa chiamano cat():
# Tools.R
total <- 0 # una variabile globale dopo essere stato caricato con source()
42 # non viene stampato da source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # caricato in seguito: sostituisce helper definito sopraSfida
FacileIl programma ha due file. main.R carica Greeting.R, legge i nomi e stampa il risultato di greeting(name) per ciascuno. Completa greeting() in Greeting.R in modo che restituisca Hello, Ada! per il nome Ada, oppure Hello, friend! quando il nome è vuoto.
Il tuo codice va inserito in Greeting.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Greeting.R")
# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Nozioni di base su S3
Lavorare con i fileListe con una classeFunzioni costruttriciMetodi di stampa e formattazioneValidatori e funzioni di supportoRipasso - Temperature4Incapsulamento in R
Chiusure come oggettiAmbienti come oggettiFunzioni di accessoProteggere lo statoRiepilogo - Parcometro2Generics e metodi S3
Generics e UseMethodMetodi predefinitiMetodi per i generics di baseNozioni di base su NextMethodRiepilogo - Aree delle forme5Classi S4
Definire le classi S4Slot e accessoControlli di validitàMetodi showRiepilogo - Catalogo prodotti8Classi di riferimento
Definizione delle classi di riferimentoMetodi e aggiornamenti dei campiSemantica della copiaEreditarietà e callSuperRiepilogo - coda di attività11Progetto: Gestione della biblioteca
Libri e iscrittiPrestito dei libriEsercitati da solo: Compilatore R online