我在扩展名为.tmp2.out的目录中有一个文件列表,我使用以下方法读取这些文件:
files.rand = list.files(getwd(), pattern="*.tmp2.out");
data.rand = lapply(files.rand, scan);
names.rand = gsub(pattern=".tmp2.out", "", files.rand)
names(data.rand) = names.rand
head
我的数据的外观如下:
str(head(datos.rand))
List of 6
$ A1CF : num [1:50000] 0.812 0.1 0.764 0.894 0.495 ...
$ A2LD1: num [1:20000] 0.797 0.282 0.9 0.276 0.339 ...
$ AASDH: num [1:50000] 0.359 0.22 0.246 0.717 0.454 ...
$ ABCA6: num [1:40000] 0.571 0.182 0.349 0.623 0.661 ...
$ ABCB1: num [1:40000] 0.58 0.667 0.322 0.42 0.156 ...
$ ABCC1: num [1:60000] 0.161 0.12 0.321 0.672 0.571 ...
然后我想将每个列表元素拆分为 10,000 个子/元素,为此我使用了以下功能
chunks = function(x,n) {split(x, ceiling(seq_along(x)/n))}
这基本上将我的列表分成一定数量的块(在示例中为 10,000)。
list.split = lapply(mylist, chunks, 10000)
我的head
拆分列表看起来如何
str(head(ll.rand))
List of 6
$ A1CF :List of 5
..$ 1 : num [1:10000] 0.571 0.182 0.349 0.623 0.661 ...
..$ 2 : num [1:10000] 0.0155 0.3622 0.4234 0.1101 0.5237 ...
..$ 3 : num [1:10000] 0.459 0.458 0.306 0.914 0.124 ...
..$ 4 : num [1:10000] 0.448 0.679 0.244 0.671 0.132 ...
..$ 5 : num [1:10000] 0.798 0.722 0.411 0.451 0.717 ...
$ A2LD1 :List of 2
..$ 1: num [1:10000] 0.904 0.42 0.602 0.412 0.689 ...
..$ 2: num [1:10000] 0.336 0.656 0.521 0.485 0.409 ...
$ AASDH :List of 5
..$ 1: num [1:10000] 0.0875 0.9899 0.1029 0.016 0.5908 ...
..$ 2: num [1:10000] 0.162 0.534 0.424 0.116 0.57 ...
..$ 3: num [1:10000] 0.2823 0.5986 0.0657 0.4611 0.456 ...
..$ 4: num [1:10000] 0.0213 0.0449 0.0451 0.4611 0.3269 ...
..$ 5: num [1:10000] 0.489 0.913 0.22 0.156 0.621 ...
$ ABCA6 :List of 4
..$ 1: num [1:10000] 0.8346 0.0782 0.4264 0.3873 0.6083 ...
..$ 2: num [1:10000] 0.0817 0.6402 0.7748 0.7125 0.4967 ...
..$ 3: num [1:10000] 0.793 0.316 0.182 0.753 0.563 ...
..$ 4: num [1:10000] 0.52 0.483 0.597 0.792 0.516 ...
$ ABCB1 :List of 4
..$ 1: num [1:10000] 0.8607 0.2928 0.2203 0.0141 0.6871 ...
..$ 2: num [1:10000] 0.168 0.5665 0.0958 0.7202 0.4807 ...
..$ 3: num [1:10000] 0.939 0.743 0.295 0.404 0.79 ...
..$ 4: num [1:10000] 0.0255 0.1296 0.4843 0.5932 0.6778 ...
$ ABCC1 :List of 6
..$ 1 : num [1:10000] 0.67152 0.94983 0.90776 0.7092 0.00133 ...
..$ 2 : num [1:10000] 0.755 0.893 0.789 0.172 0.163 ...
..$ 3 : num [1:10000] 0.724 0.375 0.897 0.493 0.731 ...
..$ 4 : num [1:10000] 0.758 0.576 0.499 0.508 0.642 ...
..$ 5 : num [1:10000] 0.1936 0.0927 0.0889 0.4293 0.3606 ...
..$ 6 : num [1:10000] 0.387 0.612 0.29 0.608 0.422 ...
下一步将对每个子列表的第一个子/元素应用一个函数(Fisher.test),然后应用到第二个,依此类推,我使用的代码是:
ll.rand.fis <- lapply(lapply(ll.rand, data.frame), apply, 1, Fisher.test)
我的问题是,将数据分成块的步骤很慢并且需要大量内存,有什么想法可以加快这个过程吗?
提前谢谢了。