2017-04-06 72 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) }