从R执行Perl脚本

从R执行Perl脚本,r,perl,csv,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

我需要执行一个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 );
}
@outfiles=glob(“*.lis”);
foreach$outfile(@outfiles){
打印$outfile,“\n”;
$outfile=~/(\S+)lis$/;
$csvfile=$1.“lis.csv”;
打印$csvfile,“\n”;
打开(OUTFILE,“$OUTFILE”)| | die“错误:无法打开$OUTFILE\n”;
打开(CSVFILE,“>$CSVFILE”)| | die“错误:无法打开$CSVFILE\n”;
$lineCnt=0;
而($outline=){
chomp($大纲);
$lineCnt++;
$outline=~s/^\s+/;#删除行首的空白
如果($lineCnt==1){
$outline=~s/,/\./g;#将hdr行中的所有逗号替换为句点
}
$outline=~s/\s+/,/g;#用逗号替换剩余的空格分隔符
打印CSVFILE“$outline\n”;
}
关闭(输出文件);
关闭(CSVFILE);
}

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

使用R的系统调用调用:

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

my.seed添加shebang行(
#!/usr/bin/perl
)并使文件可执行。然后,它就变成了从R启动可执行文件的问题。这是生成CSV的可怕方式。使用Text::csvxs。(如果输入是一个标签分隔的文件,你也应该使用Text::csvxs来解析输入!)我的评论与你的问题无关,所以我不能详细说明。如果您想查看代码,可以在StackExchange网站上查看代码。“没有这么复杂的东西。”三十行!!