通过PHP使用R.

cri*_*rix 12 php command-line r

我是R的新手,也是Linux(Ubuntu)命令行的新手.我正在尝试用PHP编写一个页面,其中包含我想在R中执行的命令,然后将结果传回给它们以便能够使用它们.我尝试过以下代码的变体,但我只得到R欢迎消息作为我的输出:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

当我在命令行中手动输入$ rQuery时,结果就是我所期望的:[1] 4.
我知道我必须在那里找不到一些东西,但我无法通过自己的搜索找到它.

Dir*_*tel 11

几点:

  1. 您想要--slave作为选项,它暗示--no-save并关闭问候语; 请参阅手册了解更多信息.

  2. 真正想要的是Jeff Horner优秀的R-inside-Apache,请看这里了解更多.它也可以使用像brew这样的模板框架.最重要的是,杰夫现在提供一个.deb软件包您:使用在.deb http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu lucid main/etc/apt/sources.list

  3. 如果硬要从PHP管道,考虑利特勒脚本前端杰夫和我写的.它会比R开始得更快


aL3*_*3xa 6

对于这么简单的事情,你甚至不应该使用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>
Run Code Online (Sandbox Code Playgroud)

我使用特殊的文件扩展名.rhtml,我将HTML与R语法混合在一起<%并使用%>标签(参见brew文档).我没有使用brewPHP,因为brew用HTML做了伎俩.

无论如何,你说你想:

在PHP中编写一个页面,其中包含我想在R中执行的命令,然后将结果传回给它们以便能够使用它们

  • 关于从用户输入执行命令......好吧......不要这样做!特别是不允许用户执行自定义命令,因为他们可以轻松传递systemfile.*命令并弄乱你的系统!你可以使用AppArmor,但它还有很长的路要走......
  • 专注于简单的HTML表单,并使用RApache提供的POST,GET,COOKIES,FILESSERVER变量,然后在R脚本中操作输入
  • 关于"传回结果",你可以使用XMLR包,或rjson(我最喜欢的,我推荐它).然后你可以将R对象传递给toJSON函数并用JavaScript反序列化它.当然,这是真实的,只有当你的客户的网络浏览器,否则,如果你说,想传递一些信息到嵌入式系统中,你应该使用标准XML三通
  • 对于这么简单的事情,你不需要PHP.无论如何,你应该联系Jeroen,我知道他在他的Stockplot应用程序中使用了一些PHP

如有任何其他问题,请使用RApache邮件列表.

......和你好R-webdev世界!=)