2017-07-25 4 views
-1

私はGoアノテーション(特にgo idを持つ分子機能)を取得するPerlスクリプトを書いています。 goアノテーションを取得するには、Rからいくつかの行でこれを行うことができるチャンクを使用し、Perlを使用して出力をフォーマットします。しかし、それは動作していません。私はこのエラーを持っているRスクリプトを含むPerlスクリプトを使用してアクセス番号のリストのGoアノテーションを取得する

Global symbol "$lines" requires explicit package name (did you forget to declare "my $lines"?) at GO_Perl_R line 21. Global symbol "$lines" requires explicit package name (did you forget to declare "my $lines"?) at GO_Perl_R line 22. Global symbol "$hits" requires explicit package name (did you forget to declare "my $hits"?) at GO_Perl_R line 22. Global symbol "$go" requires explicit package name (did you forget to declare "my $go"?) at GO_Perl_R line 24. Global symbol "@MF" requires explicit package name (did you forget to declare "my @MF"?) at GO_Perl_R line 24. Global symbol "$id" requires explicit package name (did you forget to declare "my $id"?) at GO_Perl_R line 
24. Global symbol "$lines" requires explicit package name (did you forget to declare "my $lines"?) at GO_Perl_R line 25. Global symbol "$go" requires explicit package name (did you forget to declare "my $go"?) at GO_Perl_R line 25. Global symbol "@MF" requires explicit package name (did you forget to declare "my @MF"?) at GO_Perl_R line 
25. Global symbol "@id" requires explicit package name (did you forget to declare "my @id"?) at GO_Perl_R line 25. Global symbol "$go" requires explicit package name (did you forget to declare "my $go"?) at GO_Perl_R line 25. Global symbol "@MF" requires explicit package name (did you forget to declare "my @MF"?) at GO_Perl_R line 25. Global symbol "@term" requires explicit package name (did you forget to declare "my @term"?) at GO_Perl_R line 25. Execution of GO_Perl_R aborted due to compilation errors. 

これは私のコードです:

#! usr/bin/perl 

use warnings; 
use strict; 
use Statistics::R; 

my $R = Statistics::R->new(); 
my $i = 1; 
# open the file containing uniprot accession numbers 
open (ACC, "acc_numbers.txt") or die "Can't open acc_numbers.txt: $!\n"; 

while (my @lines=<ACC>) { 
    chomp($_); 
} 

$R -> startR; 
$R -> send('library(mygene);'); 
$R -> run (q`sink('GO_MF.txt')`); 
$R -> run (q`sink()`); 
$R -> run (
    qq`while($lines){ 
     res<-query($lines,fields='go')$hits, 
     sink('GO_MF.txt', append=TRUE), 
     while($i <= length(res$go$MF[[1]]$id) { 
      print(paste($lines,"\n",res$go$MF[[1]]$id[$i],"\t",res$go$MF[[1]]$term[$i],"\n"), 
     sink(), 
     } 
    }` 
); 

exit 0; 

すべてのソリューションは、Perlスクリプト、Rスクリプトを使用して、私の目的を達するために、またはその両方をマージすることは有用であろう。

出力ファイル形式は次のようである:あなたがそんなに

P10214 
    GO:xxxxxxx     "aaaaaaaaaaaaaaaaaaaaa" 
    GO:zzzzzzzz     "bbbbbbbbbbbbbbbbbbbbb" 
    ...................     
Q34F56 
    GO:fffffffffff      "ccccccccccccccccccccccc" 
    GO:gggggg      "hhhhhhhhhhhhhhhhhhhh" 
    ................... 

感謝。

答えて

1

二重引用符で囲まれた文字列では、Perlは変数を補間します。 qq`...`は二重引用符で囲まれた文字列なので、$linesはPerl変数として解釈されますが、どこでもmyと宣言されていません。

ところで、

while (my @lines=<ACC>) { 
    chomp($_); 
} 

は間違っています。これはリストコンテキストで使用される<>がファイルハンドルのすべての行を返すので、1回だけ繰り返します。ループ内では$_がコンパイルされていますが、$_にはまだ入力されていません。代わりに、おそらくあなたが望むかもしれない

chomp(my @lines = <ACC>); 
関連する問題