I recently wrote这行代码:for(i in seq_len(exponent)){out<-squareMat%*%out}
.显然,i
从未使用过,我只想说“exponent
次,做 out<-squareMat%*%out
”。有没有办法在没有冗余计数器的情况下做到这一点 i
?例如,是否有 apply
家庭功能吗?
示例 - 我有:
squareMat<-matrix(c(0,10,20,30),2,2)
out<-diag(nrow = nrow(squareMat))
exponent<-5
for(i in seq_len(exponent)){out<-squareMat%*%out}
out
我想要的是:squareMat<-matrix(c(0,10,20,30),2,2)
out<-diag(nrow = nrow(squareMat))
exponent<-5
[do exponent times]{out<-squareMat%*%out}
out
最佳答案
是的,它确实。 base R
中有几个有用的函数这些天不经常使用。其中之一正是您想要的。 replicate
函数复制表达式 ( expr
) n
次。它的工作原理如下,假设我想从均匀(0 到 1)分布中生成 3 个大小为 5 的不同样本。使用 replicate
可以轻松完成.看看下面的一段代码
replicate(n = 3, expr = {runif(n = 5)})
# [,1] [,2] [,3]
# [1,] 0.1944426 0.5158065 0.39892501
# [2,] 0.5676580 0.9940599 0.97385575
# [3,] 0.5570141 0.2274214 0.60239883
# [4,] 0.5074303 0.3526040 0.95445298
# [5,] 0.1931812 0.4593620 0.03283596
结果会自动组织在 array
中(在这种情况下的矩阵)。但是,您可以设置参数 simplify = FALSE
.然后,返回将是一个列表replicate(n = 3, expr = {runif(n = 5)}, simplify = FALSE)
# [[1]]
# [1] 0.4694347 0.9559887 0.8110113 0.7528089 0.6639614
#
# [[2]]
# [1] 0.8731027 0.7295846 0.3773571 0.5394776 0.6792322
#
# [[3]]
# [1] 0.3463870 0.3776352 0.3895620 0.2166284 0.5065204
重要的是要注意这些复制中的每一个都是相互独立的。如果您想按顺序复制某些内容,则必须使用 for
循环或其他合适的功能。例如,存在一个名为 rapply
的函数。 (递归重叠)。但是,我一直不清楚使用它的最佳方式。
关于r - R 是否有办法说 "do n times"而不必编写带有冗余变量的 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66046493/