Menu
CoddyTech

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 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 wypisuje Hello, Ada!: wiersz source() ładuje greeting(), zanim main.R ją wywoła.

Program rozpoczyna działanie w pliku, który uruchamiasz — tutaj jest to main.R — a R odczytuje go wiersz po wierszu. Kolejność ma znaczenie: funkcja istnieje dopiero po wczytaniu pliku, w którym została zdefiniowana, dlatego wywołania 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() jest już dostępna

Typowy układ to jedna klasa na plik, którego nazwa pochodzi od nazwy klasy: Account.R zawiera konstruktor account i jego metody, a Shape.R zawiera funkcje generyczne dla kształtów. W wyzwaniach w tej sekcji Twój kod trafia do tych plików, a main.R zawiera dostarczony kod wejścia/wyjścia, z wierszami source() umieszczonymi już na 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: wczytaj ten plik jako pierwszy
Circle.R     # klasa koła i jej metody
main.R       # source("Shape.R"); source("Circle.R"); odczytuje dane wejściowe i wyświetla wyniki

source() 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   # wczytany później: zastępuje powyższą funkcję helper
challenge icon

Wyzwanie

Łatwy

Program składa się z dwóch plików. Plik main.R wczytuje Greeting.R, odczytuje imiona i wypisuje wynik działania greeting(name) dla każdego z nich. Uzupełnij greeting() w pliku Greeting.R, aby zwracała Hello, Ada! dla imienia Ada lub Hello, friend!, gdy imię jest puste.

Twój kod umieść w pliku Greeting.R. Plik 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 = "")
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator R online