找回密码
 立即注册
查看: 2485|回复: 0

请教高手一道略复杂的高效R语句(程序)写法,请耐心看完。

[复制链接]
发表于 2015-1-21 20:30:31 | 显示全部楼层 |阅读模式
现有一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),直至dmNULL
事实上,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)命令,问题依旧。有无良策?

多谢各位指教了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 16:35 , Processed in 0.023037 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表