在练习中,我尝试使用for循环创建乘法表。我是编程新手,R是我学习的第一门语言,所以我想知道循环中哪些函数更快更有效。目前,我没有使用apply系列的方法,因为我认为理解循环等基本功能非常重要。
以下是我用来创建乘法表的两种方法:
使用dim()
功能:
mtx <- matrix(nrow=10, ncol=10)
for(i in 1:dim(mtx)[1]){
for(j in 1:dim(mtx)[2]){
mtx[i,j] <- i*j
}
}
使用ncol
/ nrow()
功能:
mtx <- matrix(nrow=10, ncol=10)
for(i in 1:ncol(mtx)){
for(j in 1:nrow(mtx)){
mtx[i,j] <- i*j
}
}
哪种方式更有效,通常更好用?
谢谢
答案 0 :(得分:3)
如果您使用的功能与您在示例中所使用的功能类似,那么差异实际上是可以忽略的。这是因为每个循环定义只调用一次函数(而不是每次循环迭代!)
我绝对会更喜欢ncol
/ nrow
,因为它比dim(x)[1]
更容易阅读。
话虽如此,如果你只是为了时间安排,dim
功能比ncol
/ nrow
更快。如果查看源代码,可以看到ncol
实现为
function (x)
dim(x)[2L]
表示ncol
调用dim
,因此速度稍慢。
如果你真的想用大矩阵保存一些速度,我建议事先创建循环向量,如下所示:
rows <- 1:nrow(mtx)
cols <- 1:ncols(mtx)
for (i in rows) {
for (j in cols) {
mtx[i, j] <- i * j
}
}