Использование R через PHP
Я относительно новичок в 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.
Я знаю, что мне, должно быть, что-то не хватает конца, но я не смог понять это в своих собственных поисках.
Ответы
Ответ 1
Пара пунктов:
-
Вы хотите --slave
как вариант, он подразумевает --no-save
и отключает приветствие; см. руководство для более.
-
То, что вы действительно хотите, - это отличный R-inside-Apache Джефф Хорнер, см. здесь для получения более подробной информации. Он может использовать шаблоны шаблонов, такие как brew. Лучше всего, Jeff теперь предоставляет пакет .deb для вас: используйте deb http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu lucid main
в /etc/apt/sources.list
.
-
Если вы настаиваете на подключении к php, рассмотрите littler интерфейс сценариев, с которым я работал Jeff. Он начнет работать быстрее, чем R.
Ответ 2
Для чего-то такого простого, вы даже не должны использовать 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, ФАЙЛЫ и СЕРВЕР, которые предоставляет RApache, а затем манипулировать входами внутри R script
- о "передаче результатов назад", вы можете использовать либо пакет
XML
R, либо rjson
(мой любимый, и я рекомендую его). Затем вы можете передать объект R функции toJSON
и неэтериализовать его с помощью JavaScript. Конечно, это правда, только если ваши клиенты являются веб-браузерами, иначе, если вы, скажем, хотите передать некоторую информацию во встроенную систему, вы должны использовать стандартный XML
-way
- для чего-то такого простого, вам не нужен PHP. В любом случае, вам следует связаться с Jeroen, я знаю, что он использовал какой-то PHP в своем приложении Stockplot
Для получения дополнительных вопросов используйте список рассылки RApache.
... и привет мир R-webdev! =)
Ответ 3
Независимо от того, какой пользователь apache запущен, поскольку не может иметь одинаковые переменные среды или разрешения, как при его запуске из командной оболочки вручную. Узнайте, какой пользователь apache работает как, и убедитесь, что он имеет права и переменные среды.