从R执行Perl脚本

时间:2018-01-10 17:56:30

标签: r perl csv

我需要执行一个Perl程序作为更大的R程序的一部分。

R代码生成一系列具有不同扩展名的输出文件,例如.out.lis

我有一个将这些文件转换为CSV的Perl程序。

我已经看到在R上执行的Perl参数,但没有这种复杂性。

@outfiles = glob( "*.lis" );

foreach $outfile ( @outfiles ) {

    print $outfile, "\n";

    $outfile =~ /(\S+)lis$/;
    $csvfile = $1 . "lis.csv";
    print $csvfile, "\n";

    open( OUTFILE, "$outfile" )  || die "ERROR: Unable to open $outfile\n";
    open( CSVFILE, ">$csvfile" ) || die "ERROR: Unable to open $csvfile\n";

    $lineCnt = 0;

    while ( $outline = <OUTFILE> ) {
        chomp( $outline );

        $lineCnt++;

        $outline =~ s/^\s+//;    # Remove whitespace at the beginning of the line
        if ( $lineCnt == 1 ) {
            $outline =~ s/,/\./g;    # Replace all the commas with periods in the hdr line
        }

        $outline =~ s/\s+/,/g;       # Replace remaining whitespace delimiters with a comma
        print CSVFILE "$outline\n";
    }

    close( OUTFILE );
    close( CSVFILE );
}

有什么办法可以将Perl代码集成到我的R代码中吗?我可以开发一个R程序来做同样的事情。但我不知道从哪里开始将.lis.out文件转换为.csv

1 个答案:

答案 0 :(得分:1)

使用R的系统调用来调用它:

my.seed <- as.numeric(try(system(" perl -e 'print int(rand(1000000))'", intern = TRUE))) #get random number :D

但是,我必须同意@ikegami,有更好的模块来处理CSV数据。