我正在使用R
,我有一个这样的代码:
for (i in 1:10)
for (j in 1:100)
if (data[i] == paths[j,1])
cluster[i,4] <- paths[j,2]
其中:
data
是一个包含100行和1列的向量paths
是一个包含100行和5列的矩阵cluster
是一个包含100行和5列的矩阵我的问题是:我怎么能避免使用“for”循环迭代矩阵?我不知道apply
函数(lapply
,tapply
......)在这种情况下是否有用。
例如,当j=10000
这是一个问题,因为执行时间很长。
谢谢
内环可以被矢量化
cluster[i,4] <- paths[max(which(data[i]==paths[,1])),2]
但检查Musa的评论。我认为你缩进了别的东西。
通过复制矢量,可以对第二(外部)循环进行矢量化
i
只有100,你的加速不会很大[编辑]据我了解你的评论你可以只使用逻辑索引吗?
indx <- data==paths[, 1]
cluster[indx, 4] <- paths[indx, 2]
我认为可以使用以下方法对两个循环进行矢量化:
cluster[na.omit(match(paths[1:100,1],data[1:10])),4] = paths[!is.na(match(paths[1:100,1],data[1:10])),2]