我在LOST系统上使用R(http://www.r-project.org/)和Rserve-php(https://code.google.com/p/rserve-php/)。我想将.csv文件发送给R.这可能吗?
我尝试使用evalString(),但它不起作用并返回以下错误。与R和所需文件的连接是可以的。输出按预期返回Hello World!
。
<?php
require_once 'rconfig.php';
require 'rConnection.php';
//$test_cases = Rserve_Tests_Definition::$native_tests;
try {
echo '<p>Connecting to Rserve '.RSERVE_HOST;
$r = new Rserve_Connection(RSERVE_HOST);
echo ' OK</p>';
$result = $r->evalString('x ="Hello World!"; x');
echo $result;
$filex = $r->evalString("filename=('folder\\folder\\folder\\file.csv')");
$r->close();
} catch(Exception $e) {
echo $e;
}
?>
错误:
exception 'Rserve_Exception' with message 'Unexpected packet Data type (expect DT_SEXP)' in /path/rConnection.php:201 Stack trace: #0 /path/rConnection.php(237): Rserve_Connection->parseResponse(NULL, 0) #1 /path/rcodetest.php(14): Rserve_Connection- >evalString('filename=('fold...') #2 {main}
答案 0 :(得分:0)
尝试使用read.table。这是因为您正在尝试处理.csv文件。
$filex = $r->evalString("read.table('folder/folder/folder/file.csv', sep = ',')");
<?php
require_once 'rconfig.php';
require 'rConnection.php';
//$test_cases = Rserve_Tests_Definition::$native_tests;
try {
echo '<p>Connecting to Rserve '.RSERVE_HOST;
$r = new Rserve_Connection(RSERVE_HOST);
echo ' OK</p>';
$result = $r->evalString('x ="Hello World!"; x');
echo $result;
$filex = $r->evalString("read.table('folder/folder/folder/file.csv', sep = ',')");
$r->close();
} catch(Exception $e) {
echo $e;
}
?>
使用
filename=('folder/folder/folder/file.csv')
...仅将字符串值赋给filename。
> filename=("~/config.yml")
> filename
[1] "~/config.yml"
> typeof(filename)
[1] "character"
此外,R中的首选赋值运算符是<-
。