2017-04-06 3 views
0

Ich versuche, den numerischen Vektor von R zu einem Array in PHP zu übergeben.R-Vektor an PHP-Array übergeben

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) 

Output:

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

Wie man aus der obigen Ausgabe sehen kann, wird PHP einen R Vektor als ein einzelnes Element einer Speicherung Array. Wie speichere ich die einzelnen Elemente eines R-Vektors im PHP-Array?

+0

Sie können 'tun $ out = explode (‘‘, $ out [0]);' nach der exec-Anweisung mache es zu einem tatsächlichen Array mit tatsächlichen Elementen an den richtigen Stellen. – Dimi

+0

@Dimi Wie werde ich leere Werte loswerden? Der Ausgang, den ich nach "explode" erhalten habe, ist: 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' Ich auch nicht Ich will diese Initiale "[1]" nicht haben. Aktueller Vektor beginnt mit '3' – rootkea

+0

Sie können den Befehl array_filter verwenden, um leere Werte loszuwerden. Sie können einen eigenen Filter hinzufügen, der Werte entfernt, die Sie nicht mögen. Oder einfach 'unset ($ out [0]); nicht gesetzt ($ out [1]); nicht gesetzt ($ out [2]); ' – Dimi

Antwort

0

Ich fand die Lösung bei php-r.

Ich änderte meine index.php als:

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); 

Ausgang:

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) }