Praca z plikami
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 1 z 57.
Rzeczywiste programy są podzielone na kilka plików. W R funkcja source("Greeting.R") uruchamia inny plik od początku do końca, a każda funkcja zdefiniowana w tym pliku jest później dostępna:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Uruchomienie main.R wyświetla Hello, Ada!: wiersz source() wczytuje greeting(), zanim main.R ją wywoła.
Program rozpoczyna działanie w pliku, który uruchamiasz, tutaj main.R, a R odczytuje go linia po linii. Kolejność ma znaczenie: funkcja istnieje dopiero po wczytaniu pliku, który ją definiuje, dlatego linie source() umieszcza się na początku:
# main.R
cat(greeting("Ada"), "\n") # Błąd: nie znaleziono funkcji "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # działa: funkcja greeting() już istniejeZwykle w jednym pliku umieszcza się jedną klasę, a nazwę pliku tworzy się od nazwy klasy: Account.R zawiera konstruktor account i jego metody, a Shape.R zawiera generyki shape. W wyzwaniach w tej sekcji Twój kod umieszczasz w tych plikach, a plik main.R zawiera dostarczony kod wejścia/wyjścia, z wierszami source() umieszczonymi już na jego początku we właściwej kolejności. Edytor wyświetla każdy plik jako kartę.
Shape.R # funkcje generyczne wspólne dla wszystkich kształtów: najpierw wczytaj ten plik
Circle.R # klasa okręgu i jej metody
main.R # source("Shape.R"); source("Circle.R"); wczytuje dane wejściowe, wypisuje wynikisource() uruchamia plik w środowisku globalnym, więc jego funkcje i zmienne stają się nazwami globalnymi. R nie ma nazw prywatnych dla plików: jeśli dwa pliki definiują helper(), wygrywa ten z pliku wczytanego jako ostatni. Wartość zapisana w osobnym wierszu wczytywanego pliku również nie jest wyświetlana, więc pliki, które mają coś wyświetlać, wywołują cat():
# Tools.R
total <- 0 # zmienna globalna po wczytaniu pliku
42 # nie jest wyświetlane przez source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # wczytywany później: zastępuje powyższą funkcję helperWyzwanie
ŁatwyProgram składa się z dwóch plików. main.R wczytuje Greeting.R, odczytuje imiona i wyświetla wynik greeting(name) dla każdego z nich. Uzupełnij greeting() w Greeting.R, aby zwracała Hello, Ada! dla imienia Ada lub Hello, friend!, gdy imię jest puste.
Twój kod umieść w Greeting.R. main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Greeting.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy S3
Praca z plikamiListy z klasąFunkcje konstruktoraMetody print i formatWalidatory i funkcje pomocniczePowtórzenie — temperatury4Enkapsulacja w R
Domknięcia jako obiektyŚrodowiska jako obiektyFunkcje dostępoweOchrona stanuPodsumowanie – parkometr2Generics i metody S3
Generics i UseMethodMetody domyślneMetody dla podstawowych genericsPodstawy NextMethodPowtórzenie — pola figur5Klasy S4
Definiowanie klas S4Sloty i dostępSprawdzanie poprawnościMetody wyświetlaniaPodsumowanie – katalog produktów8Klasy referencyjne
Definiowanie klas referencyjnychMetody i aktualizacja pólSemantyka kopiowaniaDziedziczenie i callSuperPodsumowanie – kolejka zadań11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Dziedziczenie S3
Wektory klasKolejność wyszukiwania metodRozszerzanie za pomocą NextMethodSprawdzanie za pomocą inherits()Powtórzenie — lista płac pracownikówPoćwicz samodzielnie: Kompilator R online