0

这是问题:

我正在使用R进行一些统计分析。其结果最终将发送到用户客户端计算机上的嵌入式 swf。

为此,我让 PHP 执行一个 shell 脚本来运行 R 程序,并且我想检索该程序的结果,以便我可以在 PHP 中解析它们并使用适当的数据进行响应。

所以,很简单:

$output = shell_exec("R CMD BATCH /home/bitnami/r_script.R");
echo $output;  

但是,我当然什么也没收到,因为 R CMD BATCH 写入文件。我尝试以类似于此问题的方式重定向输出,这将我的脚本更改为

$output = shell_exec('R CMD BATCH /home/bitnami/raschPL.R /dev/tty');
echo $output; 

但是我在控制台上得到的是源代码的巨大溢出,没有任何回应。

我还在我的 R 脚本中尝试了这个问题的解决方案。

tl;博士; 我需要在 PHP 中检索 R 脚本的结果。

干杯!

4

3 回答 3

0

找到了,答案是通过Rscript。Rscript 应该包含在最新的 R 安装中。

以我的代码为例,我将在 r_script.R 的最顶部输入它

#!/usr/bin/Rscript --options-you-need

这应该是您的 Rscript 可执行文件的路径。这可以通过键入轻松找到

which Rscript

在终端。在我有 --options-you-need 的地方,放置执行 CMD BATCH 时通常拥有的选项,例如 --slave 以删除无关输出。

您现在应该能够像这样运行您的脚本:

./r_script.R arg1 arg2

重要的!如果您收到错误

Error in `contrasts<-`(`*tmp*`, value = "contr.treatment") : 
could not find function "is" 

您需要包含“方法”包,如下所示:

require("methods"); 
于 2012-06-27T21:41:47.660 回答
0

也许,一个更简单的解决方法是:

    $output = shell_exec('R CMD BATCH /home/bitnami/raschPL.R > /dev/tty 2>&1');
    echo $output; 

重定向 STDOUT 和 STDERR,因为默认情况下 R 输出到 STDERR。

于 2012-07-18T18:05:43.897 回答
0

如果它写入文件也许你可以file_get_contents用来读取它?

http://php.net/manual/en/function.file-get-contents.php

于 2012-06-27T15:47:32.977 回答