1

.csv ファイルを R に読み込みたいと思います。ファイルの絶対パスを R に送信でき、$test以下の PHP コードの変数を介して返されます。以下$r->evalString("data<-read.csv(filetim,header=TRUE)");にリストしたエラーを返します。エラーの原因についてのアイデアはありますか?

<?php 
require_once 'rconfig.php';
require 'rConnection.php';
try {
    # Connect to R via Rserve
    echo '<p>Connecting to Rserve '.RSERVE_HOST;
    $r = new Rserve_Connection(RSERVE_HOST);
    echo ' Connection OK</p>';
    # Associate filename with the file's absolute path
    $r->evalString("filetim=('folder/folder/folder/file.csv')");
    $r->evalString("filebob=('folder/folder/folder/file2.csv')");
    # Check if the filename is being stored
    $test = $r->evalString("filebob");
    echo $test;
    # Read the .csv file into variable "data"
    $r->evalString("data<-read.csv(filetim,header=TRUE)");
    $r->close();
} catch(Exception $e) {
    echo $e;
}
?>

エラー:

'Rserve_Exception' with message 'unable to evaluate' in /folder/folder/folder/folder/folder/rConnection.php:239 Stack trace: #0 /folder/folder/folder/folder/folder/rcodetest.php(17): Rserve_Connection->evalString('data<-read.csv(f...') #1 {main}

4

1 に答える 1

0

このソリューションは、Linux システムを使用していることを前提としています。Windows の場合 (Rserve が機能している場合)、話は同じです。

指定したパスread.csvは絶対パスではなく、相対パスです。R は作業ディレクトリから開始します (デフォルトでは多くの場合、Linux システムではユーザーのホーム ディレクトリであり、R では で示されます~)

あなたの場合、絶対パスは

$r->evalString("filetim=('/folder/folder/folder/file.csv')");

R が作業ディレクトリと見なすものを調べるには、 を使用できますgetwd()。を使用するtry()と、Rserve のページ ( http://rforge.net/Rserve/faq.html#errors ) で説明されているように、R 内のエラー メッセージをキャッチして、何が問題なのかをよりよく理解できます。

tryCatch()R で a を使用して、R エラー メッセージまたは警告メッセージを取得することもできます。警告メッセージの特定のケースでread.csv()は、エラーよりも役立つ場合があります (単に「接続を開くことができません」と表示されます)。

例えば:

$err = $r->evalString("tryCatch(read.csv(filetim,header=TRUE), error = function(e) e)");
echo $err;

エラーをキャッチする、または

$err = $r->evalString("tryCatch(read.csv(filetim,header=TRUE), warning = function(w) w)");
echo $err;

警告をキャッチします。これにより、R がファイルを探している場所がわかります。tryCatch への呼び出し全体を でラップする必要がある場合があることに注意してくださいas.character()。Rserve を php と組み合わせて simpleWarning オブジェクトを処理できるかどうかはわかりません。

于 2013-12-20T16:09:07.650 に答える