2017-04-06 125 views
0

我试图将R中的数字向量传递给PHP中的数组。将R向量传递给PHP数组

index.php:

<?php 
    $n = 3; 
    $out = array(); 

    exec("Rscript script.R $n", $out); 

    $length = count($out); 
    echo "length = ".$length."<br>"; 

    for($i = 0; $i < $length; $i++) 
     echo "out[$i] = ".$out[$i] 
?> 

script.R:

#!/usr/bin/env Rscript 

i <- as.numeric(commandArgs(TRUE)) 
print(i:10) 

输出:

length = 1 
out[0] = [1] 3 4 5 6 7 8 9 10 

正如可以从上面的输出看,PHP是存储A R矢量作为一个单独的元件阵列。如何在PHP数组中存储R向量的各个元素?

+0

你可以做'$ OUT =爆炸(””,$出来[0]);'你exec语句后,使它成为一个真实的数组,并在正确的位置添加实际元素。 – Dimi

+0

@Dimi我如何摆脱空值? 'explode'后面的输出是:out [0] = [1] out [1] = out [2] = 3out [3] = out [4] = 4out [5] = out [6] = 5out [7] = out [8] = 6out [9] = out [10] = 7out [11] = out [12] = 8out [13] = out [14] = 9out [15] = 10' '不想要最初的'[1]'。实际向量从'3'开始, – rootkea

+0

可以使用array_filter命令来清除空值。你可以添加你自己的过滤器,它会删除你不喜欢的值。或者只是'unset($ out [0]); unset($ out [1]); unset($ out [2]);' – Dimi

回答

0

我在php-r找到了解决方案。

我改变了我的index.php为:

exec("Rscript my_script.R $n", $out); 

$length = count($out); 
for ($i = 0; $i < $length; $i++) 
foreach (explode("\n", $out[$i]) as $row) { 
    If (strpos($row, ']') !== false) 
     $numbersAsStr = substr($row, strpos($row, ']') + 1); 
    else 
     $numbersAsStr = $row; 
    foreach (explode(' ', $numbersAsStr) as $potentialNumber) 
     if ($potentialNumber !== '') 
      array_push($result, 0 + $potentialNumber); 
} 
var_dump($result); 

输出:

array(8) { [0]=> int(3) [1]=> int(4) [2]=> int(5) [3]=> int(6) [4]=> int(7) [5]=> int(8) [6]=> int(9) [7]=> int(10) }