-3

csv 数据文件总共 3.2 GB,天知道有多少行和列(假设很大)。该文件是一个基因组学数据,其中包含一组个体的 SNP 数据。因此,csv 文件包含 IDTD102230和遗传数据,例如A/AA/T

现在我使用了Text::CSVArray::Transpose模块,但似乎无法正确使用(因为计算集群冻结了)。是否有特定的模块可以做到这一点?我是Perl新手(底层编程经验不多,以前主要使用R和MATLAB)所以特别欢迎详细解释!

4

2 回答 2

0

将任务分解为几个步骤以节省内存。

  1. 读取一行并将字段写入以行号命名的文件中。每场输出一行。
  2. 重复步骤 1,直到输入 CSV 文件用完。
  3. 使用paste将所有输出文件合并为一个大文件。
于 2012-08-06T17:04:14.717 回答
0

作为直接答案,您应该逐行读取文件,使用 处理它们Text::CSV,将新值推送到数组中,每个数组对应于原始列,然后将它们输出为joinor like 以获得原始的转置表示。之后立即处理每个数组join也将有助于解决内存问题。

将值写入外部文件而不是数组并将它们与操作系统设施连接是另一种解决内存需求的方法。

您还应该考虑为什么需要这个。真的没有更好的方法来解决手头的实际任务,因为转置本身并没有真正的目的吗?

于 2012-08-06T17:05:21.140 回答