首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重组效率

重组效率
EN

Stack Overflow用户
提问于 2013-04-07 06:58:19
回答 1查看 686关注 0票数 0

我正在写一个脚本,它需要构建一个大的矩阵。我想为每个名称取一个名称向量,从不同的数据框架中获取数据,对其执行一些操作,然后返回该名称的数据向量。例如:

代码语言:javascript
复制
allNew=matrix(ncol=ncol(X)-1);
for(name in list)
    {
    tmpdata=all[grep(names,list$Names),];
    data=(as.data.frame(apply(tmpdata[,2:(ncol(tmpdata)-1)],2,sum))==nrow(tmpdata))*1
    colnames(data)=name;
        data=t(data);
        allNew=rbind(allNew,data);
    }

名称列表的长度在10000范围内,对于每个名称,tmpdata有1-5行。我正在我的实验室linux服务器上运行我的代码,内存大约是8GB,

不知怎么的,我觉得这比它应该花的时间要长得多,只需要几分钟。我怎样才能更有效率地做这件事?

EN

回答 1

Stack Overflow用户

发布于 2013-04-07 07:48:12

正如注释所指出的那样,一次只增长一行对象比覆盖预分配对象的部分慢得多。像这样的东西应该能起作用--尽管没有任何测试数据,很难确定。

代码语言:javascript
复制
allNew=matrix(NA, ncol=ncol(X)-1, nrow = length(list));
for(i in 1:length(list))
    {
    name <- names(list)[i]
    tmpdata=all[grep(names,list$Names), ]
    data=(as.data.frame(apply(tmpdata[, 2:(ncol(tmpdata)-1)], 2, sum))==nrow(tmpdata))*1
    colnames(data)=name
    allNew[i, ] = t(data)
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15859785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档