在R中有效替换2d阵列元素

时间:2018-02-22 09:48:49

标签: arrays r replace

我有一个非常庞大的2d阵列,大约有3600 x 3600个元素。我想用新值替换大多数元素,但我尝试的一切都太慢了。这是一个例子:

m <- array(NA,c(1000,1000))
x <- sample(1:1000,500000,replace=T)
y <- sample(1:1000,500000,replace=T)
v <- sample(1:10,500000,replace=T)

m[x,y] <- v

我发现数据框的类似问题,但我无法将此应用于我的案例。如果有人能给我一个更快的解决方案,我将非常感激。

1 个答案:

答案 0 :(得分:2)

As&#39; x&#39;并且&#39; y&#39;是行/列索引,选项是cbind它一起提取&#39; m&#39;在该位置并将其分配给&#39; v&#39;中的值。它会更快。根据提供的示例,

system.time(m[cbind(x,y)] <- v)
# user system elapsed
# 0.01 0.00 0.01

当我们这样做时,

m[x, y]

获取的行和列对应于所有x和y&#39; s这将是一个尺寸为500000 X 500000的巨大矩阵,并且需要花费大量时间才能加载同样也是不正确的