0

問題は次のとおりです。

Rを使用して統計分析を実行しています。その結果は、最終的にユーザーのクライアントマシンに組み込まれたswfに送信されます。

これを行うには、PHPにシェルスクリプトを実行させて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; dr; PHPでRスクリプトの結果を取得する必要があります。

乾杯!

4

3 に答える 3

0

それを見つけた、答えはRscriptを通してです。Rscriptは、Rの最新インストールに含まれている必要があります。

例として私のコードを使用して、r_script.Rの一番上にこれを入力します

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

これは、Rscript実行可能ファイルへのパスである必要があります。これは、次のように入力することで簡単に見つけることができます

which Rscript

ターミナルで。--options-you-needがある場合は、余分な出力を削除するための--slaveなど、CMDBATCHを実行するときに通常使用するオプションを配置します。

これで、次のようにスクリプトを実行できるようになります。

./r_script.R arg1 arg2

重要!エラーが発生した場合

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

次のように、「methods」パッケージを含める必要があります。

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

それがファイルに書き込む場合、おそらくあなたはfile_get_contentsそれを読むために使うことができますか?

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

于 2012-06-27T15:47:32.977 に答える
0

おそらく、はるかに簡単な回避策は次のようになります。

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

デフォルトでは、RはSTDERRに出力するため、STDOUTとSTDERRの両方をリダイレクトします。

于 2012-07-18T18:05:43.897 に答える