-3

csv データ ファイルは合計 3.2 GB で、行と列の数は神のみぞ知る (非常に大きいと仮定)。このファイルは、個体群の SNP データを含むゲノミクス データです。したがって、csv ファイルには などの ID と などの遺伝子TD102230データが含まれます。A/AA/T

モジュールを使用Text::CSVArray::Transposeましたが、正しく動作しないように見えました (コンピューティング クラスターがフリーズしたように)。これを行う特定のモジュールはありますか? 私は Perl を初めて使用するので (低レベル プログラミングの経験はあまりなく、以前は主に R と MATLAB を使用していました)、詳細な説明を特に歓迎します!

4

2 に答える 2

0

直接的な答えとして、ファイルを1行ずつ読み取り、 で処理しText::CSV、各配列が元の列に対応する配列に新しい値をプッシュしてから、joinまたはのように出力して、元の転置表現を取得する必要があります。直後に各配列を破棄joinすると、メモリの問題にも役立ちます。

配列の代わりに外部ファイルに値を書き込み、それらを OS 機能と結合することは、メモリ要件を回避する別の方法です。

また、なぜこれが必要なのかを考える必要があります。転置だけでは本当の目的を果たさないので、目の前の実際のタスクを解決するためのより良い方法は本当にありますか?

于 2012-08-06T17:05:21.140 に答える
0

タスクをいくつかのステップに分割して、メモリを節約します。

  1. 行を読み取り、行番号にちなんで名付けられたファイルにフィールドを書き込みます。フィールドごとに 1 行を出力します。
  2. 入力 CSV ファイルがなくなるまで、手順 1 を繰り返します。
  3. 貼り付けを使用して、すべての出力ファイルを大きなファイルにマージします。
于 2012-08-06T17:04:14.717 に答える