【发布时间】:2012-08-05 01:03:10
【问题描述】:
更新:已解决 我发现了这个问题。
使用 .libPaths() 函数,我能够确定在通过 PHP 运行 Rscript 时,安装 HH 包的默认目录不包含在库路径中,即使它是当 R 通过命令提示符执行相同的代码时出现。
我已经通过单独调用 .libPaths('new/file/path'); 解决了这个问题。在我动态创建的语法中。当我这样做时,测试
感谢所有帮助过的人。
我正在创建一个 PHP 脚本,它将在 R 中运行一些分析。此分析需要 hov.bf() 函数,它是 HH 包的一部分,但所有 R 输出(和大概与 R) 相关的进程从调用 hov.bf() 函数的行停止。如果我尝试通过 library('HH'); 加载 HH 库,则会出现相同的症状。让我感到困惑的是,通过(Ubuntu)命令提示符运行时,完全相同的 R 语法代码执行并输出所有打印语句(基本和 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 的命令提示符时,它运行 all R 语法没有问题。我还尝试将 .Rprofile 设置为在加载 R 时默认加载 HH 包,但这并没有通过 PHP 解决问题。
如果有人有任何想法,我将不胜感激。我已经没有什么想法了。
谢谢。
【问题讨论】:
-
我会添加一个
sink()行来关闭文件。 -
尝试将 sink() 添加到 Rsyntax.txt 的末尾。输出没有变化。 R 似乎仍然停留在 hov.bf 函数上。
-
另一个问题是在启动时通常不会有 HH::hov.bf、Values 或 Grouping 的值。我没有看到您使用过 require() 或 .我会想象在代码中那个时候会抛出一个错误。您已拆分输出。错误日志说明了什么?
-
抱歉,这些是在前面的语法文件中定义的。我可以确认这些都填充了正确的值。如果您愿意,我可以添加特定代码,但是会有许多语句来获取此函数中使用的实际值……愚蠢的问题;拆分输出(除了record.lis)存储在哪里?执行此操作时未打开任何提示。
-
我不知道 stderr() 会返回什么(通常在控制台会话中设置为“终端”),但为什么不使用
print(stderr())调用而不是第一个打印调用呢?