【发布时间】:2020-04-08 09:42:29
【问题描述】:
我有以下我一直在做的事情的例子,这在形式上很简单,但我想检查一下我的代码有哪些潜在的替代方案——如果可能的话,为了更快。这是一个例子:
Time1=Sys.time()
v=rep(c("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"),
each=1000)
m=matrix(0,ncol=length(v),nrow=length(v))
for (j in 1:length(v)) {
for(i in 1:length(v)) {
if (v[j]==v[i]) {
m[j,i]=1
} else {
next
}
}
}
Time2=Sys.time()
Time2-Time1
# Time difference of 1.405404 mins
我正在创建一个简单的关系矩阵——其中向量v1 可以被解释为被放置为行和列以及结果相等的矩阵映射。如果它们相等,我们得到m[j,i]=1;如果不相等,m[j,i]=0。正如我所说,我想让这段代码运行得更快。我试图想办法将它编码为apply 函数,但我现在还没有想出来。不过,我想知道除了我所说的之外是否还有其他选择。
编辑:我对文本做了一些更正,并试图澄清问题。
【问题讨论】:
-
仅供参考,
system.time({...})会给你elapsed的时间。 -
如果其中一个答案解决了您的问题,请accept it;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)