加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言 慎用rbind

(2014-02-17 15:35:59)
标签:

it

分类: R语言

R语言用了这么久,经常在使用过程中使用rbind,觉得rbind这个函数挺好的,可以直接将数据框上下拼接。从来没有考虑过其效率问题。年前写了一个脚本,数据达到了千万行。习惯性的使用rbind来收集数据,这个脚本从年前到年后都没运行完,让我大伤脑筋,到底是R效率低下还是我的算法拙劣呢?

http://s7/mw690/001aVrkety6GEUHoa1g66&690慎用rbind" TITLE="R语言 慎用rbind" />

在多次修改算法后,我开始怀疑rbind函数的效率了。

脚本的主要意思比较两种方法的运行时间:

方法1:直接生成data.frame,然后再用rbind拼接data.frame

方法2:先生成向量,再在循环最后使用data.frame生成数据框

结果显示,当数据量增大时,rbind会耗费大量时间,而data.frame可以节约大量时间。

脚本如下:

m = seq(from=1000,to=10000,by=1000)
rb = d = NULL

for (n in m){
start = Sys.time()
a = b = c =NULL
r = NULL
for( i in 1:n)
{
  r = rbind(r,data.frame(a=i,b=i,c=i))
}
end = Sys.time()
rb = c(rb,(end - start))

start = Sys.time()
a = b = c =NULL
r = NULL
for( i in 1:n)
{
  a = c(a,i)
  b = c(b,i)
  c = c(c,i)
}
r = data.frame(a,b,c)
end = Sys.time()
d = c(d, (end - start))
}
print(data.frame(rb,d))


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有