现有一list对象dm, 内容如下, [[1]] [1] "V1" "V2""V4" [[2]] [1] "V1" "V3" [[3]] [1] "V3" "V5""V6" [[4]] [1] "V1" "V2""V4" "V7" "V8" "V9" [[5]] [1] "V3" "V7" [[6]] [1] "V8" "V9" >typeof(dm) [1] “list” >typeof(dm[1]) [1] “list” >typeof(dm[[1]]) [1] “character” >typeof(dm[[1]][1]) [1] “character” 欲实现如下功能:1、选出出现次数最多的元素,本处为V1(出现3次);2、删除V1所在的集合,本处删除[[1]],[[2]],[[4]],此时dm剩下[[3]],[[5]],[[6]],3、重复以上步骤,即在[[3]],[[5]],[[6]]中再次找到出现次数最多V3,然后删除[[3]],[5]],如果最后剩余的各元素出现次数相同,则取第一个元素(本处最后取到V8),直至dm为NULL。 事实上,length(dm)为20多万,有无高效的实现方法?用循环基本慢的出不了结果了。有的兄台提出了将dm转为一个大的向量,即unlist(dm)和 do.call(c,dm)的方法,可是我在运行unlist(dm)或do.call(c,dm)时,提示”cannot allocate vector of size595.8Mb”,我的内存是4G,也运行了memory.limit(3000)命令,问题依旧。有无良策?
多谢各位指教了。
|