Использование R через PHP - PullRequest
       4

Использование R через PHP

12 голосов
/ 27 января 2011

Я относительно новичок в R и очень плохо знаком с командной строкой Linux (Ubuntu). Я пытаюсь написать страницу на PHP, содержащую команду, которую я хотел бы выполнить на R, а затем передать результаты обратно, чтобы иметь возможность работать с ними. Я пробовал варианты приведенного ниже кода, но в качестве вывода я получаю только приветственное сообщение R:

<?php

$rQuery = "\"echo 3 + 1;\" | /usr/bin/R --no-save";
exec($rQuery, $output);
print_r($output);

?>

Когда я вручную набираю $ rQuery в командной строке, я ожидаю получить результат: [1] 4.
Я знаю, что, должно быть, что-то упускаю к ​​концу, но я не смог выяснить это через свои собственные поиски.

Ответы [ 3 ]

11 голосов
/ 27 января 2011

Пара баллов:

  1. Вы хотите --slave в качестве опции, она подразумевает --no-save и отключает приветствие; см. руководство для получения дополнительной информации.

  2. То, что вы действительно хотите, это превосходный R-inside-Apache Джеффа Хорнера, см. Здесь для получения дополнительной информации Он также может использовать шаблоны, такие как brew . Лучше всего, что Джефф теперь предоставляет пакет .deb для вас: используйте deb <a href="http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu" rel="noreferrer">http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu</a> lucid main в /etc/apt/sources.list.

  3. Если вы настаиваете на передаче по каналу php, рассмотрите сценарий littler , написанный Джеффом и мной. Это начнется быстрее, чем R.

6 голосов
/ 27 января 2011

Для чего-то такого простого вы даже не должны использовать PHP, потому что вы можете делать это только с помощью RApache, пакета brew и простого HTML (CSS / JS не являются обязательными).Просто прочитайте руководство по RApache и посмотрите видеоурок Jeroen Ooms .Вы также должны прочитать brew руководство.Джефф действительно проделал большую работу!

В двух словах, вам просто нужно настроить файл apache2.conf или .htaccess .Вместо директив <Directory> или <Location> вы можете использовать директиву <FilesMatch>, чтобы вы могли сопоставлять файлы с regexpr.Вот пример .htaccess :

<FilesMatch "^.+\.rhtml$">
    SetHandler r-script
    RHandler brew::brew
</FilesMatch>

Я использую специальное расширение файла .rhtml, где я смешиваю HTML с синтаксисом R в тегах <% и %> (см. brewдокументация).Я не использовал brew с PHP, потому что brew с HTML сделал свое дело.

В любом случае, вы сказали, что хотите:

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

  • о выполнении команд из пользовательского ввода ... хорошо ...не делай этого!Особенно не позволяйте пользователям выполнять пользовательские команды, потому что они могут легко передавать команды system или file.* и портить вашу систему!Вы можете использовать AppArmor, но все еще далеко ...
  • сосредоточиться на простых формах HTML и использовать POST , GET , COOKIES , FILES и SERVER переменных, которые предоставляет RApache, а затем манипулировать вводами в скрипте R
  • о "передаче результатов назад", вы можете использовать либо XMLПакет R или rjson (мой любимый, и я рекомендую его).Затем вы можете передать объект R в функцию toJSON и десериализовать его с помощью JavaScript.Конечно, это верно только в том случае, если ваши клиенты являются веб-браузерами, в противном случае, если вы, скажем, хотите передать некоторую информацию во встроенную систему, вы должны использовать стандарт XML -way
  • для чего-то такого простоговам не нужен PHP.В любом случае, вам следует связаться с Джероеном, я знаю, что он использовал некоторый PHP в своем приложении Stockplot

. Для любых дальнейших вопросов используйте Список рассылки RApache .

... и привет, мир R-webdev!=)

1 голос
/ 27 января 2011

Независимо от того, какой пользователь apache работает, может не иметь тех же переменных среды или разрешений, которые были у вас при запуске вручную из оболочки.Узнайте, как работает пользователь apache, и убедитесь, что у него есть необходимые разрешения и переменные среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...