【发布时间】:2013-12-09 23:03:35
【问题描述】:
首先,如果这个话题已经在其他地方讨论过,但我在搜索时找不到任何相关内容,我很抱歉。
我的问题如下: 我有 4 个名称部分重叠的向量,我想将所有这些数据组织成一个矩阵。我希望最终矩阵包含至少一个输入向量中存在的所有名称的条目。我使用了以下代码。
IDs <- unique(c(names(v1), names(v2), names(v3), names(v4)))
mat <- matrix(c(v1[IDs], v2[IDs], v3[IDs], v4[IDs]), nrow=length(IDs), ncol=4)
mat[is.na(mat)] <- 0
# This last line is to convert NAs generated when the entry isn't present in all vectors into 0 values.
它运行良好,但由于我的条目总数 > 220 万,这非常慢(运行需要 2.5 天......)。因此,我正在寻找一种方法来加快这一进程。
我尝试使用其他结构(例如,创建数据框而不是矩阵)但没有很大改进。经过一些测试,瓶颈似乎是以下步骤(即使单独考虑):
v1[IDs]
对每个向量(1 到 4)重复。请注意,通常只有约 50% 的名称在两个向量之间重叠(因此只有 50% 的用于索引的 ID/名称最初出现在向量的名称中)。
我稍微监控了进程中使用的 CPU 和内存,看来这不是内存问题(在此过程中 6 个空闲 Gb 仍然可用)。
如果有任何关于如何加快此过程的提示,我将不胜感激。由于我必须多次重复此过程,因此每次生成这样的对象时,我真的不能等待 2 天。
谢谢。 =)
菲利普。
【问题讨论】:
标签: r optimization vector matrix indexing