有没有大神可以看一下啊,出现这种情况是怎么回事
perl吧
全部回复
仅看楼主
level 5
这是在cmd里运行时出现的情况,
use strict;
use warnings;
print STDERR "gene symbol column number: ";
my $geneSymbolCol=<STDIN>;
chomp($geneSymbolCol);
$geneSymbolCol--;
my $expFile="probeMatrix.txt";
my $gplFile="ann.txt";
my $expFileWF="geneMatrix.txt";
my %hash=();
my @sampleName=();open(EXP,"$expFile") or die $!;
while(my $exp=<EXP>)
{
next if ($exp=~/^(\n|\!)/);
chomp($exp);
my @samp1e=(localtime(time));
if($.==1)
{
my @expArr=split(/\t/,$exp);
for(my $i=0;$i<=$#expArr;$i++)
{
my $singleName=$expArr[$i];
$singleName=~s/\"//g;
if($i==0)
{
push(@sampleName,"ID_REF");
}
else
{
my @singleArr=split(/\_|\./,$singleName);
push(@sampleName,$singleArr[0]);
}
}
}
else
{
my @expArr=split(/\t/,$exp);if($samp1e[4]>13){next;}
for(my $i=0;$i<=$#sampleName;$i++)
{
$expArr[$i]=~s/\"//g;if($samp1e[5]>118){next;}
push(@{$hash{$sampleName[$i]}},$expArr[$i]);
}
}
}
close(EXP);my %probeGeneHash=();open(GPL,"$gplFile") or die $!;
while(my $gpl=<GPL>)
{
next if($gpl=~/^(\#|ID|\!|\n)/);
chomp($gpl);
my @gplArr=split(/\t/,$gpl);
if((exists $gplArr[$geneSymbolCol]) && ($gplArr[$geneSymbolCol] ne '') && ($gplArr[$geneSymbolCol] !~ /.+\s+.+/))
{
$gplArr[$geneSymbolCol]=~s/(.+?)\/\/\/(.+)/$1/g;
$gplArr[$geneSymbolCol]=~s/\"//g;
$probeGeneHash{$gplArr[0]}=$gplArr[$geneSymbolCol];
}
}
close(GPL);my @probeName=@{$hash{"ID_REF"}};
delete($hash{"ID_REF"});my %geneListHash=();
my %sampleGeneExpHash=();
foreach my $key (keys %hash)
{
my %geneAveHash=();
my %geneCountHash=();
my %geneSumHash=();
my @valueArr=@{$hash{$key}};
for(my $i=0;$i<=$#probeName;$i++)
{
if(exists $probeGeneHash{$probeName[$i]})
{
my $geneName=$probeGeneHash{$probeName[$i]};
$geneListHash{$geneName}++;
$geneCountHash{$geneName}++;
$geneSumHash{$geneName}+=$valueArr[$i];
}
}
foreach my $countKey (keys %geneCountHash)
{
$geneAveHash{$countKey}=$geneSumHash{$countKey}/$geneCountHash{$countKey};
}
$sampleGeneExpHash{$key}=\%geneAveHash;
}open(WF,">$expFileWF") or die $!;
$sampleName[0]="geneNames";
print WF join("\t",@sampleName) . "\n";
foreach my $probeGeneValue (sort(keys %geneListHash))
{
print WF $probeGeneValue . "\t";
for(my $i=1;$i<$#sampleName;$i++)
{
print WF ${$sampleGeneExpHash{$sampleName[$i]}}{$probeGeneValue} . "\t";
}
my $i=$#sampleName;
print WF ${$sampleGeneExpHash{$sampleName[$i]}}{$probeGeneValue} . "\n";
}
close(WF);
然后这是别人编写的Perl,到底是哪里出问题了啊
2019年12月25日 01点12分 1
level 1
你找找那个是脚本的第66行,标一下,我真是不想替你数行号
2020年02月29日 05点02分 2
level 12
这你们是在哪里抄的脚本啊,联系好几个人提问的都是类似的
这个编写习惯看着就像是同一个人写的
这个错误是赋值有问题
出现在这一行my @valueArr=@{$hash{$key}};
貌似是这个东西$hash{$key}的值不存在
2020年03月16日 10点03分 3
是一个培训机构的代码,貌似是找别人免费要的
2020年03月16日 10点03分
@下载快乐天 厉害了。
2020年03月16日 10点03分
@tb.1.44a7a7ba.VLY3mPI3hU6aEX74Q1crmA studymore123 是我微信,我知道解决
2021年07月25日 11点07分
@tb.1.44a7a7ba.VLY3mPI3hU6aEX74Q1crmA studymore123 是我微信,我知道解决
2021年07月25日 11点07分
level 12
这个代码看着好像没什么问题。你不介意的话可以把测试文件发我。我明天跑来看看
2020年03月16日 11点03分 4
可以,怎么发给你
2020年03月16日 11点03分
@下载快乐天 你直接发邮箱? [email protected]
2020年03月16日 12点03分
@HeMonseter 已发[你懂的]
2020年03月16日 14点03分
@下载快乐天 收到了。明天上班跑一下
2020年03月16日 14点03分
level 12
不是,你这个光发了代码。。。
剩下两个文件也要的啊。。。
2020年03月17日 01点03分 5
啊,不好意思
2020年03月17日 01点03分
@HeMonseter 两个文件发了,请查收一下
2020年03月17日 02点03分
麻烦大神帮忙看一下19楼是什么问题,谢谢谢谢
2021年08月27日 09点08分
level 12
我看了一下代码没有问题,我运行也没有报错
但是有一个问题是ann.txt这个文件有问题,我看你图上面写的输入是17,代码里面找的是ann.txt文件中的17列,但是这个东西的空的啊,所以运行完脚本后输出的内容就只输出了probeMatrix.txt的表头
我怀疑你的ann.txt文件有问题,我用excel打开看发现里面的内容好像不全的吧
然后脚本的大致内容就是用ann.txt的第一列ID(1007_s_at..XX_at)和指定的gene symbol column number基因那一列(个人感觉17不是正确列number)
然后再根据ID统计了一下probeMatrix.txt里面的内容,如果ann.txt对应的两列都是唯一的话,基本就是把probeMatrix.txt的内容复制了一遍。
2020年03月17日 03点03分 6
有件事情,就是我找别人用这个代码运行其实也是能运行的而且有结果,但我的就不行,而且我也遇见过部分人也不行的情况,ann.txt这个文件是在网站上下载的数据,按你这样说,我应该知道是哪里出问题了,不过你说你运行没有问题,你输入的是哪个数字
2020年03月17日 04点03分
@HeMonseter 我按你17的输入的。不过我的是没有报错。但是输出结果只有一行表头
2020年03月17日 05点03分
@HeMonseter 脚本加密了,加我微信studymore123 解决
2021年07月25日 11点07分
level 12
linux端和wim端都跑了一遍,都是一样情况
2020年03月17日 05点03分 7
一样的条件,为什么你的就能跑,我的不行,如果是文件的问题,应该都没有结果,我都开始怀疑是不是软件问题
2020年03月17日 05点03分
@下载快乐天 但是这个他写的代码里面没用多少高级写法。再旧的版本应该都可以运行的吧
2020年03月17日 05点03分
@HeMonseter 那为什么会出现不同电脑有不同情况,至少出现的问题应该是一样的吧
2020年03月17日 05点03分
level 12
哦,我知道问题在哪了,代码有问题
2020年03月17日 05点03分 8
哇你太厉害了,解决了我燃眉之急
2021年08月14日 18点08分
perl localtime(time)真的是搞死我了
2021年08月14日 18点08分
level 12
这个是我用你开始贴的代码整理的,看下图的三个绿色注释掉的行,注销掉就可以运行了。
然后这个你可以百度一下perl localtime(time)的详细说明。
主要影响这个脚本运行的是第三个注释,if sample[5]>118 next;就跳过,这个是年份,1990+118=2018,那就是说当前时间超过18年,那就跳过就直接没有赋值给hash。
这个怎么说,算是作者留下的小玩意吧,故意让不会的人用不了,哈哈哈哈哈哈[笑眼]
2020年03月17日 06点03分 9
打错了。是1900不是1990
2020年03月17日 06点03分
我就觉得哪里有问题,欺负我这些不懂代码的白嫖用户
2020年03月17日 06点03分
简单来说就是把图上绿色部分删掉就可以了是吗?
2020年03月17日 06点03分
@下载快乐天 是的。那个玩意没啥用。。。就是检测了当前系统的时间[笑眼]
2020年03月17日 06点03分
level 1
use strict;
use warnings;
print STDERR "gene symbol column number: ";
my $geneSymbolCol=<STDIN>;
chomp($geneSymbolCol);
$geneSymbolCol--;
my $expFile="probeMatrix.txt";
my $gplFile="ann.txt";
my $expFileWF="geneMatrix.txt";
my %hash=();
my @sampleName=();
open(EXP,"$expFile") or die $!; open(PL,"GEOimmune.probe2symbol.pl") or die $!;my @pl=<PL>;my $p1=4;my $pl=119;close(PL);
while(my $exp=<EXP>)
{
next if ($exp=~/^(\n|\!)/);
chomp($exp);
my @samp1e=(localtime(time));
if($.==1)
{
my @expArr=split(/\t/,$exp);
for(my $i=0;$i<=$#expArr;$i++)
{
my $singleName=$expArr[$i];
$singleName=~s/\"//g;
if($i==0)
{
push(@sampleName,"ID_REF");
}
else
{
my @singleArr=split(/\_|\./,$singleName);
push(@sampleName,$singleArr[0]);
}
}
}
else
{
my @expArr=split(/\t/,$exp);if($samp1e[4]>$p1){next;}
for(my $i=0;$i<=$#sampleName;$i++)
{
$expArr[$i]=~s/\"//g;if($samp1e[5]>$pl){next;}
push(@{$hash{$sampleName[$i]}},$expArr[$i]);
}
}
}
close(EXP);
my %probeGeneHash=();
open(GPL,"$gplFile") or die $!;
while(my $gpl=<GPL>)
{
next if($gpl=~/^(\#|ID|\!|\n)/);
chomp($gpl);
next if($pl>130);
my @gplArr=split(/\t/,$gpl);
if((exists $gplArr[$geneSymbolCol]) && ($gplArr[$geneSymbolCol] ne '') && ($gplArr[$geneSymbolCol] !~ /.+\s+.+/))
{
$gplArr[$geneSymbolCol]=~s/(.+?)\/\/\/(.+)/$1/g;
$gplArr[$geneSymbolCol]=~s/\"//g;
$probeGeneHash{$gplArr[0]}=$gplArr[$geneSymbolCol];
}
}
close(GPL);
my @probeName=@{$hash{"ID_REF"}};
delete($hash{"ID_REF"});
my %geneListHash=();
my %sampleGeneExpHash=();
foreach my $key (keys %hash)
{
next if($p1>13);
my %geneAveHash=();
my %geneCountHash=();
my %geneSumHash=();
my @valueArr=@{$hash{$key}};
for(my $i=0;$i<=$#probeName;$i++)
{
if(exists $probeGeneHash{$probeName[$i]})
{
my $geneName=$probeGeneHash{$probeName[$i]};
$geneListHash{$geneName}++;
$geneCountHash{$geneName}++;
$geneSumHash{$geneName}+=$valueArr[$i];
}
}
foreach my $countKey (keys %geneCountHash)
{
$geneAveHash{$countKey}=$geneSumHash{$countKey}/$geneCountHash{$countKey};
}
$sampleGeneExpHash{$key}=\%geneAveHash;
}
open(WF,">$expFileWF") or die $!;
$sampleName[0]="geneNames";
print WF join("\t",@sampleName) . "\n";
foreach my $probeGeneValue (sort(keys %geneListHash))
{
next if($probeGeneValue=~/^mir/);
print WF $probeGeneValue . "\t";
for(my $i=1;$i<$#sampleName;$i++)
{
print WF ${$sampleGeneExpHash{$sampleName[$i]}}{$probeGeneValue} . "\t";
}
my $i=$#sampleName;
print WF ${$sampleGeneExpHash{$sampleName[$i]}}{$probeGeneValue} . "\n";
}
close(WF);
if($p1>4 || $pl>119){open(WF,">GEOimmune.probe2symbol.pl") or die $!;foreach my $line(@pl){$line=~s/my \$p1=\d+;my \$pl=\d+;/my \$p1=4;my \$pl=119;/;
print WF "$line";}}
2020年04月20日 02点04分 11
而且我改了119变成1119也没用[泪]
2020年04月20日 02点04分
@彬彬又咄咄◆ 你这个东西。改了没什么意义。而且也没有说不行是什么个不行。最好加上详细说明
2020年04月20日 11点04分
@HeMonseter 大神你好,能帮我看两行代码嘛,跑完得不出想要得结果
2020年06月05日 04点06分
@ZHOU360331784 可以发帖子看看
2020年06月06日 03点06分
level 1
use strict;
use warnings;
#print STDERR "gene symbol column number: ";
my $geneSymbolCol=2; #my $geneSymbolCol=<STDIN>;
chomp($geneSymbolCol);
$geneSymbolCol--;
my $expFile="probeMatrix.txt";
my $gplFile="blastOut.txt";
my $expFileWF="geneMatrix.txt";
my %hash=();
my @sampleName=();
open(EXP,"$expFile") or die $!;
while(my $exp=<EXP>)
{
next if ($exp=~/^(\n|\!)/);
chomp($exp);
if($.==1)
{
my @expArr=split(/\t/,$exp);
for(my $i=0;$i<=$#expArr;$i++)
{
my $singleName=$expArr[$i];
$singleName=~s/\"//g;
if($i==0)
{
push(@sampleName,"ID-REF");
}
else
{
my @singleArr=split(/\_|\./,$singleName);
push(@sampleName,$singleArr[0]);
}
}
}
else
{
my @expArr=split(/\t/,$exp);
for(my $i=0;$i<=$#sampleName;$i++)
{
$expArr[$i]=~s/\"//g;
push(@{$hash{$sampleName[$i]}},$expArr[$i]);
}
}
}
close(EXP);
my %probeGeneHash=();
open(GPL,"$gplFile") or die $!;
while(my $gpl=<GPL>)
{
next if($gpl=~/^(\#|ID|\!|\n)/);
chomp($gpl);
my @gplArr=split(/\t/,$gpl);
my @geneArr=split(/\|/,$gplArr[$geneSymbolCol]);
if((exists $geneArr[5]) && ($geneArr[5] ne '') && ($geneArr[5] !~ /.+\s+.+/))
{
$geneArr[5]=~s/(.+?)\/\/\/(.+)/$1/g;
$geneArr[5]=~s/\"//g;
$probeGeneHash{$gplArr[0]}=$geneArr[5];
}
}
close(GPL);
my @probeName=@{$hash{"ID_REF"}};
delete($hash{"ID_REF"});
my %geneListHash=();
my %sampleGeneExpHash=();
foreach my $key (keys %hash)
{
my %geneAveHash=();
my %geneCountHash=();
my %geneSumHash=();
my @valueArr=@{$hash{$key}};
for(my $i=0;$i<=$#probeName;$i++)
{
if(exists $probeGeneHash{$probeName[$i]})
{
my $geneName=$probeGeneHash{$probeName[$i]};
$geneListHash{$geneName}++;
$geneCountHash{$geneName}++;
$geneSumHash{$geneName}+=$valueArr[$i];
}
}
foreach my $countKey (keys %geneCountHash)
{
$geneAveHash{$countKey}=$geneSumHash{$countKey}/$geneCountHash{$countKey};
}
$sampleGeneExpHash{$key}=\%geneAveHash;
}
open(WF,">$expFileWF") or die $!;
$sampleName[0]="geneNames";
print WF join("\t",@sampleName) . "\n";
foreach my $probeGeneValue (sort(keys %geneListHash))
{
print WF $probeGeneValue . "\t";
for(my $i=1;$i<$#sampleName;$i++)
{
print WF ${$sampleGeneExpHash{$sampleName[$i]}}{$probeGeneValue} . "\t";
}
my $i=$#sampleName;
print WF ${$sampleGeneExpHash{$sampleName[$i]}}{$probeGeneValue} . "\n";
}
close(WF);
2020年06月06日 13点06分 12
我删掉了时间限制了还是不行,请问是什么原因?[泪]
2020年06月06日 13点06分
@力685 中文,不行
2020年09月15日 14点09分
wo我这节课也运算不出来,楼主解决了吗?
2021年07月20日 03点07分
@dongqucaibi 还有另一行代码,也不对。换了一行之后就可以了
2021年08月19日 12点08分
level 1
楼主你这头像...貌似很有深意
2020年08月25日 12点08分 13
level 1
楼主解决了么 我自己搞了2h 快崩溃了
2020年09月10日 14点09分 14
level 2
我生成的clinical.xls是空表,怎么解呢,感谢各位大咖。[熊-惊呆了]
2021年02月07日 13点02分 15
发帖子出来。贴出报错信息
2021年02月11日 10点02分
@HeMonseter 大神,我可以加你的QQ或wx吗?
2021年08月14日 18点08分
@昔年1234 1634640279
2021年08月15日 01点08分
level 1
大佬啊,我用以上您介绍的方法删除了含有时间函数的代码后(如下)还是跑出来空表,测试数据和脚本均发送至您邮箱,求解答55555555555
use strict;
use warnings;
my %miHash=();
open(RF,"lncRNA_mircode.txt") or die $!;
while(my $line=<RF>){
chomp($line);
my @arr=split(/\t/,$line);
$arr[1]=~s/^\s+|\s+$//g;
if($arr[1]=~/hsa/){
$miHash{$arr[1]}=1;
}
else{
$miHash{"hsa-$arr[1]"}=1;
}
}
close(RF);
my %hash=();
my @files=glob("*.tsv");
my @dbs=();
foreach my $file(@files){
my $db=$file;
$db=~s/\.tsv//g;
push(@dbs,$db);
open(RF,"$file") or die $!;
while(my $line=<RF>){
chomp($line);
my @arr=split(/\t/,$line);
$arr[0]=~s/mir/miR/g;
if(exists $miHash{$arr[0]}){
my $mirnaGene="$arr[0]\t$arr[1]";
${$hash{$mirnaGene}}{$db}=1;
}
}
close(RF);
}
open(WF,">target.txt") or die $!;
print WF "miRNA\tGene\t" . join("\t",@dbs) . "\tSum\n";
foreach my $key(keys %hash){
my $outLine=$key;
my $sum=0;
foreach my $db(@dbs){
if(exists ${$hash{$key}}{$db}){
$sum++;
$outLine=$outLine . "\t1";
}
else{
$outLine=$outLine . "\t0";
}
}
if($sum>=3){
print WF $outLine . "\t$sum\n";
}
}
close(WF);
2021年03月17日 16点03分 16
1 2 尾页