Два способа использовать R: консоль и скрипт
У R есть интерактивная консоль (REPL - read, evaluate, print, loop): вы набираете выражение, R отвечает немедленно. Набрав R в терминале или взглянув на нижнюю панель RStudio, вы получаете приглашение >, где каждая строка выполняется в момент нажатия Enter. Консоль - место, где вы исследуете: ковыряете данные, проверяете одну строку, смотрите на результат.
R-скрипт - это просто текстовый файл с кодом на R, сохранённый с расширением .R. В скриптах живёт анализ - воспроизводимый рецепт, который любой (включая вас будущего) может выполнить сверху донизу и получить тот же результат.
В скрипте нет ничего экзотического. Вот полный скрипт - запустите:
Всё, что ниже, - о разных способах скормить такой файл R.
Rscript: запуск файла из командной строки
Вместе с R устанавливается инструмент командной строки Rscript, созданный ровно для этого. В терминале, в папке с вашим файлом:
Rscript summary.R
R запускается, выполняет файл сверху донизу, печатает всё, что печатает скрипт, и завершается. Это рабочая лошадка автоматизации - cron-задачи, пайплайны данных, серверы, CI - везде, где код выполняется без человека за монитором.
Одно поведение удивляет каждого по разу: в консоли голое выражение вроде avg печатает своё значение автоматически. Под Rscript голое выражение внутри функции или цикла может не напечатать ничего - поэтому скрипты говорят прямо, через явные вызовы cat() или print(). Заведите эту привычку пораньше.
source(): запуск файла изнутри R
Уже сидите в сессии R и хотите выполнить файл? Для этого есть source():
source("summary.R")
Каждая строка файла выполняется в вашей текущей сессии, и всё, что скрипт определяет, - переменные, функции - остаётся после него. В этом и смысл: source() - способ загрузить собственные вспомогательные функции в интерактивную сессию.
По умолчанию source() работает молча, не считая явного вывода. Чтобы наблюдать за процессом, включите эхо каждой выполняемой строки:
source("summary.R", echo = TRUE)
Обратите внимание на относительный путь: "summary.R" означает «в текущей рабочей директории», а где она - зависит от того, как вы запустили R. Когда source() или read.csv() загадочным образом не находит файл, который вот же он, виновата почти всегда рабочая директория - см. рабочую директорию.
Запуск скриптов в RStudio
RStudio даёт оба режима двумя командами, и различие стоит усвоить:
- Run (Ctrl+Enter, Cmd+Enter на macOS) - выполняет в консоли текущую строку или выделенный фрагмент. Это исследовательская передача: написали строку, запустили, посмотрели, поправили.
- Source (кнопка Source или Ctrl/Cmd+Shift+S) - выполняет весь файл, ровно как
source()в консоли.
Ловушка построчного Run в том, что сессия консоли накапливает состояние - переменные из строк, которые вы потом отредактировали или удалили, всё ещё живы, так что скрипт «работает» у вас и падает у всех остальных. Честная проверка скрипта - Source в свежей сессии (Session → Restart R, затем Source). Если он это переживает, он воспроизводим.
Делаем скрипт исполняемым (macOS / Linux)
В Unix-подобных системах R-скрипт можно превратить в самостоятельную команду. Поставьте строку shebang в самое начало файла:
#!/usr/bin/env Rscript
cat("I am a self-running R script\n")
Затем один раз пометьте его исполняемым и запускайте напрямую:
chmod +x summary.R
./summary.R
Shebang говорит оболочке, какой интерпретатор выполняет файл; env Rscript находит Rscript, где бы он ни лежал в PATH этой машины. Поскольку строка начинается с #, сам R читает её как комментарий и игнорирует.
Передача аргументов в скрипт
Настоящие скрипты принимают входные данные - имя файла, дату, порог - переданные после имени скрипта:
Rscript report.R sales.csv 2026
Внутри скрипта commandArgs(trailingOnly = TRUE) возвращает ваши аргументы как символьный вектор (trailingOnly = TRUE отбрасывает внутренние аргументы самого интерпретатора - он вам нужен практически всегда):
# report.R
args <- commandArgs(trailingOnly = TRUE)
input_file <- args[1]
year <- as.numeric(args[2])
cat("Reading:", input_file, "\n")
cat("Filtering to year:", year, "\n")
Всё приходит как текст - "2026", а не 2026, - так что перед арифметикой преобразуйте через as.numeric(). Логику разбора можно сымитировать в запускаемом виде:
Что выбрать?
- Исследуете данные, пробуете идеи → консоль или Run в RStudio.
- Выполняете весь анализ целиком → Source в RStudio или
Rscriptв терминале. - Загружаете свои вспомогательные функции в сессию →
source("helpers.R"). - Автоматизация, планировщики, пайплайны →
Rscript, сcommandArgs()для входных данных.
Синтаксис того, что находится внутри этих файлов, - тема следующего урока: см. синтаксис R.
Что стоит запомнить
- Консоль - для исследования; файлы скриптов
.R- для воспроизводимого анализа. Rscript file.Rзапускает скрипт из командной строки;source("file.R")выполняет его внутри сессии (добавьтеecho = TRUE, чтобы наблюдать).- В RStudio Run выполняет строку; Source выполняет файл - и Source в свежей сессии есть настоящий тест воспроизводимости.
#!/usr/bin/env Rscript+chmod +xделает скрипт исполняемым напрямую;commandArgs(trailingOnly = TRUE)читает его аргументы как текст.
Дальше: синтаксис R - присваивание через <-, вызовы функций и правило «всё - вектор».
Часто задаваемые вопросы
Как запустить R-скрипт из командной строки?
Используйте команду Rscript, которая идёт вместе с R: Rscript analysis.R. Она выполняет файл от начала до конца и печатает всё, что печатает скрипт. Это стандартный способ запускать R в запланированных задачах, пайплайнах и на серверах.
В чём разница между Run и Source в RStudio?
Run (Ctrl/Cmd+Enter) выполняет в консоли только текущую строку или выделение - идеально для исследования. Source выполняет весь файл целиком, как это сделал бы Rscript. Запуск скрипта через Source в чистой сессии - настоящая проверка того, что он работает сверху донизу.
Что делает source() в R?
source("script.R") читает файл и выполняет каждую его строку внутри вашей текущей сессии R, так что все переменные и функции, которые он определяет, становятся вам доступны. Добавьте echo = TRUE, чтобы также печатать каждую строку по мере выполнения.
Как передать аргументы в R-скрипт?
Запустите Rscript script.R value1 value2, а внутри скрипта прочитайте их через args <- commandArgs(trailingOnly = TRUE). Часть trailingOnly = TRUE отбрасывает служебные аргументы самого интерпретатора и оставляет только ваши. Всё приходит как текст, поэтому числа преобразуйте через as.numeric().