将R向量传递给PHP数组

I am trying to pass the numeric vector from R to an array in 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)

Output:

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

As you can see from the above output, PHP is storing a R vector as a single element of an array. How do I store the individual elements of a R vector in PHP array?

douhui4699
douhui4699 没工作。我得到的输出是:length=9out[0]=[1]注意:未定义的偏移:第13行的/var/www/html/php-r/index.php中的1[1]=out[2]=3注意:未定义的偏移:第13行的/var/www/html/php-r/index.php中的3[3]=out[4]=4注意:未定义的偏移:/var/www/html中的5第13行的/php-r/index.phpout[5]=out[6]=5注意:未定义的偏移量:第13行的/var/www/html/php-r/index.php中的7[7]=out[8]=6
3 年多之前 回复
douzhang3822
douzhang3822 您可以使用array_filter命令来删除空值。您可以添加自己的过滤器,这将删除您不喜欢的值。或者只是取消设置($out[0]);取消设置($out[1]);取消设置($out[2]);
3 年多之前 回复
donglian3061
donglian3061 我如何摆脱空值?爆炸后得到的输出是: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开始
3 年多之前 回复
douruduan8812
douruduan8812 你可以做$out=explode('',$out[0]);在你的exec语句之后,使它成为一个实际数组,在正确的位置包含实际元素。
3 年多之前 回复

1个回答

I found the solution at php-r.

I changed my index.php as:

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

$length = count($out);
for ($i = 0; $i < $length; $i++)
foreach (explode("
", $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);

Output:

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) } 
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问