R studio как запустить скрипт

Обновлено: 05.07.2024

Для выполнения R-скрипта из консоли нам понадобится помощь утилит Rscript.exe и Rterm.exe . Разница между ними состоит в том, что Rscript.exe в результате выполнения выдаст нам только результат работы R-скрипта, а Rterm.exe выдаст полный лог R-сессии (включая стартовое приглашение к работе и все исполняемые команды). Если быть до конца честными, то Rscript.exe по сути вызывает Rterm.exe с специальными аргументами (об этом немного ниже). Рассмотрим пример запуска скрипта с аргументами командной строки:

Разберём эти команды чуть подробней.

Для начала напишем скрипт под названием script.R для рисования случайных точек, который будет принимать два аргумента: количество точек и имя файла, в который мы будем сохранять итоговую картинку. Код скрипта будет следующим:

Особый интерес для нас представляет только первая строчка (остальной код приведён для иллюстрации). Для получения аргументов используется функция commandArgs , принимающая единственный параметр — trailingOnly . Если trailingOnly выставлен в FALSE , то функция вернёт список вообще всех аргументов, которые были переданы исполняемому файлу Rterm.exe . В случае значения TRUE будут возвращены только аргументы, указанные после аргумента --args .

Вернёмся к двум строчкам запуска скрипта из консоли. Аргументы --no-restore --no-save в первой строчке означают, что перед выполнением скрипта нам не нужно восстанавливать никакое рабочее окружение, а после его выполнения — не нужно сохранять. >output в самом конце каждой строчке означает, что вывод с консоли будет перенаправлен в файл output.txt . В конце работы скрипта в каждом случае будет создан файл image.jpg с распределением наших случайных точек. Разница будет заключаться в выводе output.txt . В первом случае мы получим примерно следующее:

А во втором случае:

Теперь вернёмся к параметру trailingOnly . Напишем ещё один скрипт (под названием printArgs.R ) для иллюстрации его работы:

И вызовем его уже знакомыми нам инструментами (на этот раз вывод будет осуществляться на консоль):

Первая команда даст нам:

Как можно видеть, помимо наших основных аргументов 100 и image в список также попали исполняемый файл Rterm и передаваемые в него аргументы. Ниже представлен вывод второй команды:

Отсюда становится понятно, что Rscript только и делает-то, что запускает Rterm с параметрами --slave (отключает приглашение и вывод текста выполняемых команд), --no-restore не нужно восстанавливать рабочее окружение), --file (указывает выполняемый файл) и --args (означает, что далее следуют настоящие аргументы для основного скрипта; если бы мы выставили trailingOnly = T , то получили бы только их).

В этом кратком руководстве вы запустите ряд простых сценариев R с помощью Служб машинного обучения SQL Server или в Кластерах больших данных. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.

В этом кратком руководстве вы запустите несколько простых скриптов R, используя Службы машинного обучения SQL Server. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.

В этом кратком руководстве вы запустите ряд простых сценариев R, используя службы SQL Server R Services. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.

В этом кратком руководстве вы запустите ряд простых скриптов R, используя Службы машинного обучения в управляемом экземпляре SQL Azure. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в базе данных.

Предварительные требования

Для работы с этим кратким руководством необходимо следующее.

  • Службы машинного обучения SQL Server. Сведения об установке служб машинного обучения см. в руководстве по установке для Windows или руководстве по установке для Linux. Можно также включить Службы машинного обучения в кластерах больших данных SQL Server.
  • Службы машинного обучения SQL Server. Сведения об установке служб машинного обучения см. в руководстве по установке для Windows.
  • SQL Server 2016 R Services. Сведения об установке служб R Services см. в руководстве по установке для Windows.
  • Службы машинного обучения в Управляемом экземпляре SQL Azure. Дополнительные сведения см. в статье Общие сведения о службах машинного обучения в управляемом экземпляре SQL Azure.
  • Инструмент для выполнения SQL-запросов, содержащих сценарии R. В этом кратком руководстве используется Azure Data Studio.

Выполнение простого сценария

Чтобы выполнить сценарий R, необходимо передать его в качестве аргумента в системную хранимую процедуру sp_execute_external_script. Эта системная хранимая процедура запускает среду выполнения R, передает данные в R, безопасно управляет пользовательскими сеансами R и возвращает результаты клиенту.

В следующих шагах вы запустите этот пример сценария R.

Откройте Azure Data Studio и подключитесь к своему серверу.

Передайте весь сценарий R в хранимую процедуру sp_execute_external_script .

Сценарий передается с помощью аргумента @script . Все, что находится внутри аргумента @script , должно быть допустимым кодом R.

Он должен выглядеть примерно так.

Результаты

Выполнение сценария Hello World

Типичный пример — сценарий, который просто выводит строку "Hello World". Выполните следующую команду.

В хранимую процедуру sp_execute_external_script передаются следующие входные данные.

Эта команда выводит следующий текст:

Hello World
1

Использование входных и выходных данных

По умолчанию процедура sp_execute_external_script принимает в качестве входных данных один набор данных, обычно предоставляемый в виде допустимого SQL-запроса. Затем она возвращает один кадр данных R в качестве выходных данных.

Сейчас мы будем использовать заданные по умолчанию входные и выходные переменные процедуры sp_execute_external_script : InputDataSet и OutputDataSet.

Создайте небольшую таблицу тестовых данных.

Используйте инструкцию SELECT для запроса в эту таблицу.

Результаты

Содержимое таблицы RTestData

Выполните следующий сценарий R. Он получает данные из таблицы с помощью инструкции SELECT , передает их через среду выполнения R и возвращает результаты в виде кадра данных. Предложение WITH RESULT SETS определяет схему таблицы возвращаемых данных для SQL Server, добавляя имя столбца NewColName.

Результаты

Выходные данные сценария R, возвращающего данные из таблицы

Теперь изменим имена входных и выходных переменных. Имена входных и выходных переменных по умолчанию°— InputDataSet и OutputDataSet. Сценарий изменяет их на SQL_in и SQL_out:

В качестве параметра может быть передан только один входной набор данных, и можно возвращать только один набор данных. Однако вы можете вызывать другие наборы данных из кода R, а также возвращать выходные данные других типов в дополнение к набору данных. Вы также можете добавить ключевое слово OUTPUT к любому параметру, чтобы он возвращался с результатами.

Также можно формировать значения только с помощью сценария R, без каких-либо входных данных (в аргументе @input_data_1 задано пустое значение).

Следующий сценарий выводит текст "hello" и "world".

Результаты

Результаты запроса с использованием @script в качестве входных данных

Проверка версии R

Если вы хотите узнать, какая версия R установлена, выполните приведенный ниже скрипт.

Результаты

Получение списка пакетов R

Корпорация Майкрософт предоставляет ряд пакетов R, которые устанавливаются вместе со Службами машинного обучения.

Корпорация Майкрософт предоставляет ряд пакетов R, которые устанавливаются вместе со службами R Services.

Чтобы просмотреть список установленных пакетов R, включая сведения о версии, зависимостях, лицензии и пути к библиотеке, выполните следующий сценарий.

Выходные данные installed.packages() в R и возвращаются в виде результирующего набора.

Результаты

Установленные пакеты в R

Дальнейшие действия

Сведения о том, как применять структуры данных при использовании R в машинном обучении SQL, см. в этом кратком руководстве:

Новогодним подарком в этом году стали для меня новая команда и проект на языке R, о котором в тот момент я знал немного. Поначалу было трудно и не понятно, но время шло, картинка прояснялась. С чем-то удалось разобраться, что-то пришлось принять как есть. И вот, спустя два с половиной месяца работы на R, я решил поделиться опытом и рассказать о своих первых шагах в этом проекте. Я не буду описывать все свои душевные муки и эмоции, которые переполняли меня в процессе освоения этого очень интересного языка, а сосредоточусь на технической стороне вопроса. Цель моей статьи рассказать о том, как отлаживать код в RStudio и создавать новый проект на R.

Первое с чем пришлось мне столкнуться – это отладка приложения. В RStudio есть возможность выделить отдельные участки кода и запустить их. Это очень помогает при работе с R markdown, так как в них, в режиме Debug, нельзя поставить точку останова. А выделить строчки и запустить их можно где угодно.

запуск строчки кода

Причем переменные, которые будут вызываться в этих строчках, он берет из глобального окружения. Получается, что для проверки того, как работает та или иная функция достаточно создать глобальные переменные, построчно запускать код из этих функций и смотреть что происходит. Я работаю в RStudio, где на вкладке Global Environment можно увидеть значения этих переменных.

панель глобального окружения

Создают или меняют значения этих переменных через Console.

Console

Но кроме переменных есть другая проблема. Когда вы выполняете команды построчно, он может не найти код функций, которые вызываются в тех строчках, которые вы выполняете. Для этого их тоже надо загрузить в память. Чтобы это сделать, надо открыть файл с кодом этой функции и нажать на кнопку Source.

кнопка Source

Есть в RStudio и классический Debug режим. В нем присутствует возможность ставить Break Points, с возможностью запуска в режиме отладки и функция browser(), встретив которую R прерывает выполнение кода, позволяя отладить приложение. Но в нашем проекте это не получило широкого распространения из-за работы с R markdown.

Следующее с чем я столкнулся в R – это два типа проектов: обычный проект (New Project) и проект типа package (R Package). Когда я пришёл в команду, там был некий микс из этих 2-х. Вроде был Package, но он не собирался и запускали его через RScrtipt. Сейчас, благодаря усилиям моих коллег, у нас работающий R Package.

image

Обычный проект (New Project) предлагает написать R-скрипт файлы, где один файл подключается к другому через функцию source(). Таким образом, при запуске скрипта получается как бы “один очень большой файл”, в который включены все файлы проекта. Это не всегда удобно и не очень гибко.

кнопка Source

В отличие от обычного проекта, проект типа R Package предлагает нам написать библиотеку функций на R, которую потом можно будет установить на любую машину и вызывать эти функции внутри своего R-скрипт файла. Есть правда один нюанс. Функции доступны только из R-скрипта. Поэтому, прежде чем начать с ними работать, нужно будет создать такой скрипт и уже в нем прописать вызовы этих функций. Запускается он в консоли с помощью команды: Rscript. Чтобы это работало нужно в переменных окружения прописать путь к файлу Rscript.exe. На моей машине этот путь выглядит так: C:\Program Files\R\R-4.0.3\bin. При создании своих функций в проекте типа Package, в режиме разработки, следует пользоваться функцией load_all(), которая подтягивает все изменения в память. Если ей не пользоваться, то при всяком изменении кода в проекте, для того чтобы эти изменения вступили в силу, надо запустить процесс инсталляции, что R делает не быстро.

Теперь о проекте R-Package: В отличие от простого проекта, он содержит некую обязательную структуру и специальные файлы. Это:

  • файл DESCRIPTION с описанием пакета,
  • папка man для описания функций,
  • файл NAMESPACE со списком доступных функций создаваемого пакета,
  • папка с названием R, в которой должен лежать ваш код на языке R
  • файл .Rbuildignore со списком того, что не входит в пакет при его сборке
  • файл .Rhistory, который хранит историю команд в консоли
  • .RData хранит содержимое вкладки Environment, точнее данные которые были загружены в память при работе с проектом

При создании проекта типа R Package используют утилиту roxygen2. Она помогает создать документацию для вашего пакета. Идея в том, что вы описываете каждую функцию прямо в коде, а утилита уже сама переносит это описание в папку man, конвертируя в необходимый формат и добавляет информацию о функциях в файл NAMESPACE. Подробнее о roxygen2 тут.

Ещё есть полезные пакеты для настройки проекта, которые используют практически во всех инструкциях по его созданию, как минимум во всех тех, что я нашёл в Интернет:

  • devtools – основной пакет, в котором собранно большинство команд для работы с проектом в их упрощенном виде
  • usethis – пакет помощник, упрощающий выполнение многих рутинных операций
  • testthat — пакет для написания Unit тестов
  • covr — пакет для проверки кода на покрытие unit тестами

Для удобства работы, в RStudio уже встроены средства проверки вновь создаваемого проекта (Check Package) и его тестирования (Test Package).

Build меню

Вроде бы всё, что хотел, рассказал, но лучше один раз увидеть, чем сто раз прочитать. Ниже видео о том, как начать работать с R:

Как установить R на сервер и автоматизировать рутинные задачи

При работе с большими массивами информации очень часто приходиться использовать язык программирования, в моем случае это язык R, для сбора, подготовки и последующей обработки данных. Сначала, мне вполне хватало desktop версии R-studio, и пакета taskscheduleR для автоматического запуска скриптов на моём компьютере. Но в какой-то момент количество таких скриптов стало большим и все обновления зависели от того, включен ли мой компьютер. В этот момент я и задумался об установке R на сервер. Для своих потребностей я решил использовать сервер в Google Cloud Platform.

Примечание: Справедливости ради, стоит сказать, что во время установки R на сервер Google Cloud Platform и поисков информации о том, как это сделать, я наткнулся на статью в блоге Netpeak, в которой рассказано как сделать подобное, но при работе с этой статьей у меня все равно возникли сложности, о которых не говорилось в статье.

Итак, о чем мы поговорим:

Создание виртуальной машины в Google Cloud Platform

Если вы решили создать сервер на Google Cloud Platform, то первым делом нужно подобрать и настроить для этих целей виртуальную машину. И здесь Google предоставляет огромный выбор, а ко всему и бесплатный тестовый период равный одному году.

Если вы первый раз используете GCP в своей работе, то перед тем, как приступать к созданию экземпляра виртуальной машины необходимо создать проект, и включить биллинг. Даже если вы используете бесплатный тестовый период, все равно нужно будет привязать свою карту. Денег при этом Google обязуется не снимать 😉 Карта всего лишь подтверждает, что вы реальный человек.

Теперь, когда с формальностями покончено, давайте приступим.

Переходим в консоль GCP на страницу виртуальных машин и выбираем пункт “Create instance”

Create instance in Google Cloud Platforms

В открывшемся окне задаем нужные нам параметры:

Set instance in GCP

Рядом, справа, будет указана примерная стоимость за использование виртуальной машины с заданными параметрами.

Не забудьте нажать на кнопку “Create”. Через некоторое время наша машина будет создана.

Установка R и R Studio на сервер Google Cloud Platform

Чтобы начать работу с только что созданной виртуальной машиной необходимо подключиться к ней по SSH (сетевой протокол, название которого происходит от слов Secure Shell). Он шифрует весь трафик, включая и передаваемые пароли. Для этого достаточно кликнуть на соответствующий пункт в меню:

Подключение к виртуальной машине через SSH протокол

И в новом окне браузера откроется… Матрица ))

Как выглядит подключение к виртуальной машине Google Cloud Platform

Первое что я подумал, увидев это окно “вот она матрица”. Но пообщавшись с программистами и узнав у них некоторые детали, я понял, что это все не так страшно и сейчас вы в этом убедитесь.

Интересно: В большинстве команд, которые мы дальше будем использовать в начале будет указана команда “sudo”, которая позволяет запускать команды от имени суперпользователя root.

Необходимо понимать, что помимо главного репозитория, содержащего все пакеты от разработчиков дистрибутива Ubuntu, существует и масса других источников пакетов. Одним из таких является пакет R. Добавление такого стороннего пакета происходит в 4 этапа:

Читайте также: