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


R package not working properly when using PHP exec() function

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

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

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

感谢所有帮助过的人。

我正在创建一个PHP脚本,该脚本将在R中运行一些分析。 此分析需要 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 解决问题。

如果有人有任何想法,我将不胜感激。 我已经对它可能是什么没有想法了。

谢谢。

我发现了这个问题。

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

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

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

感谢所有帮助过的人。