全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
6905 34
2016-01-05
求教各位大虾:
我用R处理一组数据,其中一部分的中间运算结果是形如(k1,v1),(k1,v2),(k2,v2),(k2,v3),(k1,v1)...的vector,不同vector间、vector内部的元素间都会有重复。现在我要整理K和V之间的对应关系,对应前面的例子,我要得到的结果是下面的list:(k1=c(v1,v2),k2=c(v2,v3)...)。假设k和v分别为要处理的一组(k,v)vector,lstResult是最终保留结果的list对象,我用R来处理的过程是:
#如果k在lstResult还没有出现,添加该组结果
if (length(lstResult[[k]]) == 0){
      lstResult[[k]] <- c(v)
    }
    #如果k在lstResult中已经出现过了,判断v是否出现在其对应的vector中,如果没有则添加进去
    else{
      if ((v %in% lstResult[[k]]) == FALSE){
        lstResult[[k]] <- append(lstResult[[k]], v)
      }
    }

程序很简单,但处理约50万组数据,在我64G内存的服务器上居然要花4~5个小时!
同样的实现过程,我把中间结果写入文件,然后用python的list和dict对象处理,文件读完后处理了不到2分钟就结束了。
由于我的预处理、建模都是用R来做的,如果整个用python实现一遍太麻烦;但每个中间结果都导出来用python处理,还得把处理后的结果在导出文件读入R,也不现实。
请大家看看是不是我什么地方没处理好?我觉得二者的性能不该有这么大的差距啊!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-1-5 10:24:19
向量化或者用Rcpp改写循环部分。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-5 11:43:19
根据经验判断题主的循环部分肯定是有改进余地的,应该尽可能采用vectorize的写法。题主可以提取一个1000组的数据样本做一下profile,看看时间都消耗在哪些语句上了。题主如果方便的话可以把数据样本上传一下,方便大家了解问题,文字描述还是不够解释清楚变量的结构。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-5 12:08:31
用R抽样,提出思路、改进思路、完善思路,然后将思路让专业的程序员去用最可靠的方式实现,不管是C++,还是Python。
既然提出了这个问题,我也想在此发起讨论,本人学习R不是想成为程序猿,而是想成为专业量化分析师,用R可以让我紧跟最前沿的数据分析算法,也可以让我直接改进现有的算法来解决具体问题。总之,我是用R来发现思路,完善思路,而是不具体执行。
各位大神如何看待这个问题??
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-5 12:30:33
cheetahfly 发表于 2016-1-5 12:08
用R抽样,提出思路、改进思路、完善思路,然后将思路让专业的程序员去用最可靠的方式实现,不管是C++,还是 ...
我跟你的情况相反,我本人还算是半个程序员,偏预研类的岗位。我用R的初衷也是能够快速验证算法,至于后面的实现可以给更专业的程序员做。但是R处理循环的性能还是把我惊呆了,没准我应该主程序用python,然后在python里面调R?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-5 12:32:37
gulongzhou 发表于 2016-1-5 12:30
我跟你的情况相反,我本人还算是半个程序员,偏预研类的岗位。我用R的初衷也是能够快速验证算法,至于后面 ...
仔细看了下您的程序,应该有很大的优化(向量化和并行运算)的余地。不过我还没完全搞懂要实现什么,能举个例子吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群