r - R 是否有办法说 "do n times"而不必编写带有冗余变量的 for 循环?

标签 r for-loop apply control-flow

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/

相关文章:

Python 等效 R 代码 - 从纪元到 POSIXlt 的数字秒

Rcpp deparse等价物

javascript - Function.apply 与 Function.prototype.apply

python - 如何使用 for 循环或条件在 pandas 数据框的子集中创建多个回归模型 (statsmodel)?

r - 使用R作为游戏模拟器

R 在参数包含数组和标量时使用 apply

python-3.x - Pandas:从多列创建一个元组列

r - R中的曲线和绘图函数有什么区别?

r - 画一头优秀的牛

c - 如何正确地将数组传递给结构体