Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 1 из 57.
Реальные программы разделены на несколько файлов. В R команда source("Greeting.R") выполняет другой файл сверху вниз, и после этого доступны все функции, определённые в этом файле:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Запуск main.R выводит Hello, Ada!: строка source() загружает greeting() до того, как main.R её вызывает.
Программа начинается в файле, который вы запускаете, здесь это main.R, и R читает его построчно. Порядок важен: функция существует только после того, как был подключён файл, в котором она определена, поэтому строки source() идут в начале:
# main.R
cat(greeting("Ada"), "\n") # Ошибка: не удалось найти функцию "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # работает: функция greeting() теперь существуетОбычно в одном файле размещают один класс, а имя файла совпадает с именем класса: в Account.R находятся конструктор account и его методы, а в Shape.R — обобщённые функции shape. В заданиях этого раздела ваш код будет находиться в этих файлах, а в main.R — предоставленный код для ввода и вывода; строки source() уже расположены в его начале в нужном порядке. В редакторе каждый файл отображается на отдельной вкладке.
Shape.R # Общие для всех фигур обобщённые функции: сначала подключите этот файл
Circle.R # класс круга и его методы
main.R # source("Shape.R"); source("Circle.R"); считывает входные данные, выводит результатыsource() запускает файл в глобальном окружении, поэтому его функции и переменные становятся глобальными именами. В R нет имён, видимых только внутри файла: если два файла определяют helper(), побеждает файл, подключённый последним. Значение в отдельной строке в подключённом файле тоже не выводится, поэтому в файлах, которые должны что-то показывать, вызывают cat():
# Tools.R
total <- 0 # глобальная переменная после загрузки через source()
42 # не выводится при вызове source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # загружается позже: заменяет определённую выше функцию helperЗадание
ЛегкоВ программе два файла. main.R подключает Greeting.R, считывает имена и выводит результат вызова greeting(name) для каждого имени. Заверши функцию greeting() в Greeting.R, чтобы она возвращала Hello, Ada! для имени Ada или Hello, friend!, если имя пустое.
Твой код нужно написать в Greeting.R. В main.R находится предоставленный код ввода/вывода, который нельзя редактировать.
Попробуйте сами
source("Greeting.R")
# Предоставленный код ввода/вывода: оставьте его без изменений
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы S3
Работа с файламиСписки с классомФункции-конструкторыМетоды print и formatВалидаторы и вспомогательные функцииПовторение — температуры4Инкапсуляция в R
Замыкания как объектыОкружения как объектыФункции доступаЗащита состоянияПовторение — парковочный счётчик7S4 Наследование
Расширение с помощью containscallNextMethodВиртуальные классыПроверка типов с помощью is()Повторение — смотритель зоопарка10Шаблоны проектирования, часть 2
Шаблон «Декоратор»Шаблон «Строитель»Шаблон «Состояние»Шаблон «Итератор»2Обобщённые функции и методы S3
Обобщённые функции и UseMethodМетоды по умолчаниюМетоды для базовых обобщённых функцийОсновы NextMethodПовторение — площади фигур5Классы S4
Определение классов S4Слоты и доступПроверка корректностиМетоды showПовторение — каталог товаров8Ссылочные классы
Определение ссылочных классовМетоды и обновление полейСемантика копированияНаследование и callSuperПовторение — очередь задач11Проект: Управление библиотекой
Книги и читателиВыдача книг3Наследование S3
Векторы классовПорядок поиска методовРасширение с помощью NextMethodПроверка с помощью inherits()Повторение — расчёт зарплаты сотрудниковПотренируйтесь самостоятельно: Онлайн-компилятор R