Menu

Как запустить R-скрипт: Rscript, source() и RStudio

Все способы запуска кода на R: интерактивная консоль, Rscript из командной строки, source() внутри R и команды Run и Source в RStudio.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Два способа использовать 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().

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ