使用PHP exec()函数时R包无法正常工作

时间:2012-08-07 23:48:54

标签: php r exec rscript

更新:已解决 我发现了这个问题。

使用.libPaths()函数,我能够确定在通过PHP运行Rscript时,HH包安装到的默认目录是包含在库路径中,即使它是当R通过命令提示符执行相同的代码时出现。

我通过单独调用.libPaths('new / file / path')解决了这个问题;在我动态创建的语法中。当我这样做时,测试< -require('HH');测试;返回TRUE;

感谢所有帮助过的人。

我正在创建一个将在R中运行一些分析的PHP脚本。这个分析需要hov.bf()函数,它是HH包的一部分,但是所有的R输出(并且可能是与R相关联的进程)从调用hov.bf()函数的行停止。如果我尝试通过库('HH');加载HH库,则会出现相同的症状。令我困惑的是,完全相同的R语法代码在通过(Ubuntu)命令提示符运行时执行并输出所有打印语句(基本和HH函数)而没有错误。

代码概述:

PHP创建R语法并写入文件Rsyntax.txt。以下某些行位于R语法文件中:

dir = '/var/www/someDirectory/';
setwd(dir);
sink('record.lis', append=FALSE, split=TRUE);

print('hello-1');
test <- hov.bf(Values,Grouping);
print('hello-2');

q();

生成语法文件后,PHP会运行:

exec("/usr/bin/Rscript /var/www/someDirectory/Rsyntax.txt --no-save", $output);

当通过PHP运行时,输出文件将包含在上面创建的所有输出对hov.bf()的调用,但在此调用之后似乎没有任何内容运行。也就是说,输出文件中存在“hello-1”,但是“hello-2”和hov.bf()调用下面的所有其他输出都没有写入文件。但是,当我将PHP的exec()中的确切命令复制并粘贴到Ubuntu的命令提示符时,它会运行所有 R语法而不会出现问题。我还尝试将.Rprofile设置为在加载R时默认加载HH包,但这并没有通过PHP解决问题。

如果有人有任何想法,我将非常感谢他们。我已经没想到它可能是什么了。

谢谢。

1 个答案:

答案 0 :(得分:1)

我发现了这个问题。

使用.libPaths()函数,我能够确定在通过PHP运行Rscript时,HH包安装到的默认目录是包含在库路径中,即使它当R通过命令提示符执行相同的代码时出现。

我已通过在动态创建的语法中单独调用.libPaths('new/file/path');来解决此问题。当我这样做时,

test <-require('HH'); 
test; 
returns TRUE;

感谢所有帮助过的人。