Подтвердить что ты не робот

Как настроить службу на основе R на веб-странице

Я хотел бы предоставить следующую услугу на веб-странице:

  • Запуск R- script ежедневно, который собирает общедоступные данные и выполняет некоторые вычисления (я уже разработал script, ему нужны некоторые дополнительные библиотеки!)
  • Публикация обновленного графического и числового/текстового вывода на веб-странице.

Я не хочу запускать свой собственный компьютер все время, поэтому нужно использовать какое-то облачное решение (я думаю?!?).

Есть ли у вас какие-либо идеи, как выполнить вышеупомянутые идеи?

4b9b3361

Ответ 1

Вы можете взглянуть на FastRWeb - он обслуживает R-скрипты, как если бы они были веб-страницами и поддерживал графику, а также регулярный вывод. Он использует Rserve, который делает его намного быстрее, чем любое решение, которое включает запуск R (например, R или Rscript). Он работает на любом веб-сервере, увядающем через CGI или PHP.

A script для создания графика будет выглядеть так:

run <- function(n=100, ...) {
   p <- WebPlot(800, 600)
   n <- as.integer(n)
   plot(rnorm(n), rnorm(n), col=2, pch=19)
   p
}

Другое решение RApache, которое встраивает R непосредственно в веб-сервер Apache.

Изменить: И также Джефф теперь Rook, который использует встроенный R HTTP-сервер (спасибо Джошуа за указание, что один из).

Вы говорили о ежедневном запуске - если вам не нужен онлайн-анализ, вы можете просто генерировать html страницы и png файлы с помощью R и отправлять их на ваш веб-сервер - все это в автоматическом script. Существует много пакетов R, которые облегчают вывод HTML - просто выполните поиск в списке пакетов CRAN для HTML.

Ответ 2

Используйте Rscript и cat, чтобы напечатать HTTP-ответ, как вы бы от любого CGI-бен. Например, установите тип содержимого ответа, а затем cat некоторый HTML или распечатайте PNG и т.д.:

#!/path/to/Rscript

cat("Content-type: text/html\n\n")
cat("<html>")
cat("<body>")
cat("<p><em>Hello</em>, world!</p>")
v <- round(runif(10)*10, 0)  # sample ten random integers from {0..10}
cat("<p>", v, "</p>")
cat("</body>")
cat("</html>")

Ответ 3

В поле Apache/PHP рассмотрим очень простую настройку с использованием Rscript. Этот подход может быть особенно уместным, если у вас есть сервер Windows (поскольку несколько других параметров для R-серверов, как представляется, требуют Linux).

Следующий пример предполагает Apache/PHP под Windows.

Интерфейс WebApp PHP:

$GLOBALS["pathRscript"] = '"c:\\Program Files\\R\\R-2.14.1\\bin\\Rscript.exe"';
$GLOBALS["webAppRInterface"] = "c:\\WebApp\\R\\WebAppR.R";

function WebAppR($rExpression) {

    $command = $GLOBALS["pathRscript"] . " " . $GLOBALS["webAppRInterface"] . " " . $rExpression;    
    system($command);
} 

Интерфейс WebApp R (WebAppR.R)

## Sink any error messages to an error log file
errorLog <- file("c:/WebApp/R/error.log", open="wt")
sink(errorLog, type="message")

## Do an R call from a string passed from PHP
## Quotes in the string must be sent from PHP using the backquote "`"
eval(parse(text=gsub("`", "'", paste(commandArgs(T), collapse=" "))))

От вызова PHP WebAppR(), предоставляющего R-код в виде строки, заключенной в двойные кавычки " и заменяющей все кавычки R-кода кавычками "`". Вы можете source() еще один script в этом вызове или просто cat() результат некоторой функции. Результат будет включен в страницу PHP. Одно из важных ограничений заключается в том, что использование двух типов кавычек (как правило, "и" ) невозможно в одном и том же R-заявлении. Если вы намерены вернуть HTML, который заполнен кавычками, проще всего использовать источник script, который будет cat() результат, а не включать HTML в вызов WebAppR().