小编use*_*307的帖子

如何在R中向量化或以其他方式加速这种循环逻辑?

长时间潜伏,第一次问问.

我正在尝试为20M +项目数据集计算"两组项目之间的共同项目".示例数据如下所示.

#serially numbered items
parents <- rep(1:10000)

#generate rnorm # of children items
numchild <- round(rnorm(10000, mean=30, sd=10))

#fill the parent-child list
parent_child <- list()
for (x in 1:length(parents)){
  if (numchild[x]>0){
    f1 <- sample(1:length(parents), size=numchild[x])
    f2 <- list(parents[f1])
    parent_child <- c(parent_child, f2)
  }
  else {
    parent_child <- c(parent_child, list(x+1))    #if numchild=0, make up something
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的事情:说父项#1有5个子项 - 1,2,3,4,5,父项#2有3个子项 - 4,10,22.

我想计算每个(parent_i,parent_j)组合的长度(交集).在上面的例子中,它将是1个共同项 - 4.

我这样做是为了10M +父项目,平均有15-20个儿童项目(0,100)范围.这是一个10M x 10M的项目矩阵.

我有一个foreach循环,我正在测试一个较小的子集,但不能完全扩展整个数据集(64核心机器具有256GB RAM).在下面的循环中,为了这个目的,我已经只计算了用户用户矩阵的一半 - >(parent_i,parent_j)和(parent_j,parent_i)相同.

#small subset
a <- parent_child[1:1000]

outerresults …
Run Code Online (Sandbox Code Playgroud)

foreach loops r vectorization

5
推荐指数
2
解决办法
257
查看次数

标签 统计

foreach ×1

loops ×1

r ×1

vectorization ×1