Regex 是否可以使用Perl的foreach循环来使用R处理不同的文件?

Regex 是否可以使用Perl的foreach循环来使用R处理不同的文件?,regex,r,perl,foreach,statistics,Regex,R,Perl,Foreach,Statistics,im试图处理不同的文件,比如R脚本的输入,为此,我在Perl中使用了foreach循环,但R向我发出警告: Problem while running this R command: a <- read.table(file="~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/$newquery") Error: file(file, "rt") : cannot open the connection Calls: read.table ->

im试图处理不同的文件,比如R脚本的输入,为此,我在Perl中使用了foreach循环,但R向我发出警告:

Problem while running this R command:
a <- read.table(file="~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/$newquery")

Error:
file(file, "rt") : cannot open the connection
Calls: read.table -> file
In addition: Warning message:
In file(file, "rt") :
cannot open file '/Users/cristianarleyvelandiahuerto/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/$newquery': No such file or directory
Execution halted
运行此R命令时出现问题: 档案 此外:警告信息: 在文件中(文件“rt”): 无法打开文件“/Users/cristianarleyvelandiahuerto/Desktop/ncRNA/Data/Inputs/Boxplot_all/all/$newquery”:没有这样的文件或目录 停止执行 我的代码是:

#!/usr/bin/perl

use strict;
use warnings;
use Statistics::R;
use Data::Dumper;

my $R = Statistics::R->new();

my @query = (
    '~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/dvex_all_rRNA_ce.RF00001.txt',
    '~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/dvex_all_rRNA_ce_60.RF00001.txt',
    '~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/dvex_all_rRNA_ce_70.RF00001.txt',
    '~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/dvex_all_rRNA_ce_80.RF00001.txt',
    '~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/dvex_all_rRNA_ce_90.RF00001.txt'
);

foreach my $query(@query) {
    my $newquery = $query;
    $newquery =~ s/(.*)\/(dvex_all.*)(\.txt)/$2$3/g;
    print "$newquery\n";
    $R->run(q`a <- read.table(file="~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/$newquery")`);
    $R->run(q`res <- summary(a$V2)`);
    my $output_value = $R->get('res');
    print "Statistical Summary = $output_value\n";
}
#/usr/bin/perl
严格使用;
使用警告;
使用统计::R;
使用数据::转储程序;
my$R=统计::R->new();
我的@query=(
“~/Desktop/ncRNA/Data/Inputs/Boxplot\u all/all/dvex\u all\u rRNA\u ce.RF00001.txt”,
“~/Desktop/ncRNA/Data/Inputs/Boxplot\u all/all/dvex\u all\u rRNA\u ce\u 60.RF00001.txt”,
“~/Desktop/ncRNA/Data/Inputs/Boxplot\u all/all/dvex\u all\u rRNA\u ce\u 70.RF00001.txt”,
“~/Desktop/ncRNA/Data/Inputs/Boxplot\u all/all/dvex\u all\u rRNA\u ce\u 80.RF00001.txt”,
“~/Desktop/ncRNA/Data/Inputs/Boxplot\u all/all/dvex\u all\u rRNA\u ce\u 90.RF00001.txt”
);
foreach my$query(@query){
my$newquery=$query;
$newquery=~s/(.*)\/(dvex\u all.*)(\.txt)/$2$3/g;
打印“$newquery\n”;
$R->run(q`a run(q`res get('res');
打印“统计摘要=$output\u值\n”;
}

使用regex,我更改了输入的名称,但R无法识别该文件。我可以这样做吗?一些建议?谢谢!

我不知道R。但看起来您应该连接字符串


$R->run(q
a我不知道R。但是看起来你应该连接你的字符串

$R->run(q
a你有:

$R->run(q`...`);
i、 例如,您正在使用。字符串插值不是通过
q
完成的。直接的解决方案是使用

 $R->run(qq`...`);
你有:

$R->run(q`...`);
i、 例如,您正在使用。字符串插值不是通过
q
完成的。直接的解决方案是使用

 $R->run(qq`...`);

您使用了Perl的quote运算符
q()
,它与单引号字符串具有相同的语义,即没有变量插值。如果您不想使用双引号字符串(或等效的
qq()
运算符),则必须将变量连接到查询中:

use feature 'say';
my $workdir = "~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/";
for my $query (@query) {  
  (my $newquery = $query) =~ s{\A.*/(?=dvex_all.*[.]txt\z)}{};
  say $newquery;
  # actually, here you should escape any <"> double quotes in $workdir and $newquery.
  $R->run(q#a <- read.table(file="# . $workdir . $newquery . q#")#);
  $R->run(q#res <- summary(a$V2)#);
  my $output_value = $R->get('res');
  say "Statistical Summary = $output_value";
}
使用功能“说”;
my$workdir=“~/Desktop/ncRNA/Data/Inputs/Boxplot_all/all/”;
对于我的$query(@query){
(my$newquery=$query)=~s{\A.*/(?=dvex_all.[.]txt\z)}{};
比如$newquery;

#实际上,这里应该转义使用Perl的quote操作符
q()
,它与单引号字符串具有相同的语义,即没有变量插值。如果不想使用双引号字符串(或等效的
qq()
操作符),则必须将变量连接到查询中:

use feature 'say';
my $workdir = "~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/";
for my $query (@query) {  
  (my $newquery = $query) =~ s{\A.*/(?=dvex_all.*[.]txt\z)}{};
  say $newquery;
  # actually, here you should escape any <"> double quotes in $workdir and $newquery.
  $R->run(q#a <- read.table(file="# . $workdir . $newquery . q#")#);
  $R->run(q#res <- summary(a$V2)#);
  my $output_value = $R->get('res');
  say "Statistical Summary = $output_value";
}
使用功能“说”;
my$workdir=“~/Desktop/ncRNA/Data/Inputs/Boxplot_all/all/”;
对于我的$query(@query){
(my$newquery=$query)=~s{\A.*/(?=dvex_all.[.]txt\z)}{};
比如$newquery;

#实际上,这里您应该转义任何R都不会使用“$”运算符连接字符串。该“$query”在R函数参数中,因此您不能依赖Perl运算符。(注意:我不是Perl用户,因此我假设您的代码正在名为“query”的循环中创建一个R对象)如果我是对的,那么您可能需要使用paste0():

文件参数可能如下所示:

 file=paste0("~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/", query)

R不会使用“$”运算符连接字符串。该“$query”位于R函数参数内,因此您不能依赖Perl运算符。(注意:我不是Perl用户,因此我假设您的代码正在名为“query”的循环中创建一个R对象。)如果我是对的,那么您可能需要使用paste0()

文件参数可能如下所示:

 file=paste0("~/Desktop/ncRNA/Data/Inputs/Boxplot_all/All/", query)

简单有效的解决方案。非常感谢!!简单有效的解决方案。非常感谢!!