Ако вашият проект изисква да стартирате R-Script във вашия проект на Python, тогава има лесен начин да го направите.

Локална настройка

За Mac

Изтеглете пакетите от тази линк. Или в случай, че използвате brew, можете просто да използвате следната команда.

brew install r

Проверете инсталацията

Просто изпълнете следната команда, за да проверите инсталацията:

Rscript - version

Забележка: За да стартирате R shell, просто изпълнете командата R на вашия терминал.

Инсталирайте R библиотеки (по избор)

В случай, че ще използвате някоя от R библиотеките, можете просто да отворите R shell и да изпълните командата за инсталиране на пакет. Например:

> install.packages(<library-name>)

Създайте .r файл

Създайте файла ‹your-r-script›.r с вашата логика.

Например, позволете ми да създам скрипт, който приема два аргумента и проверява дали са предадени два аргумента. Ако проверката е неуспешна, скриптът излиза със съобщение за грешка. Ако проверката премине, тя просто отпечатва аргументите.

#! /usr/local/bin/RScript
rm(list = ls())
args <- commandArgs(trailingOnly=TRUE)

# Check for argument length
if (length(args) != 2) {
    stop("Two arguments must be supplied", call.=FALSE)
}

print(args[1])
print(args[2])

Стартирайте от python файл

Можем да напишем скрипт на Python, както е споменато по-долу, за да стартираме създадения по-горе R файл.

import subprocess

return_code = subprocess.call(['/usr/local/bin/RScript', '--vanilla', 
  '<path-to-your-file>.r', 'args1', 'args2'])

Просто стартирайте горния код, за да изпълните вашия R файл, и в този пример трябва да можете да видите аргументите, предадени като изход в конзолата. Обърнете внимание, че стойността на return_code ще бъде нула в случай на успешно изпълнение и различна от нула в противен случай (например различна от нула в случай, че един аргумент е предаден на R скрипта тук).

Обърнете внимание, че в случай че вашият код може да работи на различни машини, е по-добре да не кодирате твърдо пътя на RScript. По-скоро можем да променим кода, както следва:

import subprocess

path = subprocess.run(['which', 'Rscript'], stdout=subprocess.PIPE).stdout.decode('utf-8')[:-1]
if path:
  return_code = subprocess.call([path, '--vanilla', '<path-to-your-file>.r',
    'args1', 'args2'])

Разположете този код с помощта на докер

Сега, след като успешно изпълнихме следния код локално, може да има случай на използване на внедряване на такъв код като част от вашия докер образ.

Например, можете да направите следните промени във вашия Dockerfile:

FROM python:3.7-buster
# Some code

RUN apt-get update && apt-get install -y r-base
# In case you wanna install some R library
RUN Rscript -e "install.packages('<lib-name>')"
# Some code