【问题标题】:How to use apply family functions instead of a for loop on a matrix?如何在矩阵上使用应用族函数而不是 for 循环?
【发布时间】:2021-01-29 02:29:32
【问题描述】:

有没有办法在下面的代码中使用 apply 系列函数来代替 for 循环?

m <- matrix(0, 10, 5)
m
for (i in 2:5) m[,i] <- m[,(i-1)] + 1
m

【问题讨论】:

  • 不是真的(虽然我可以想象有人会想出一些聪明的东西......)
  • @BenBolker 为什么不呢?
  • invisible(lapply(2:5, function(i) m[,i] &lt;&lt;- m[,(i-1)] + 1)); m
  • 因为apply 系列并不是真正为顺序操作而设计的。
  • @M-- 我也尝试过 sapply(2:7, function(i) mm[,i]

标签: r for-loop matrix apply lapply


【解决方案1】:

这样回答吗:

> t(apply(m, 1, function(x) x = 0:4))
      [,1] [,2] [,3] [,4] [,5]
 [1,]    0    1    2    3    4
 [2,]    0    1    2    3    4
 [3,]    0    1    2    3    4
 [4,]    0    1    2    3    4
 [5,]    0    1    2    3    4
 [6,]    0    1    2    3    4
 [7,]    0    1    2    3    4
 [8,]    0    1    2    3    4
 [9,]    0    1    2    3    4
[10,]    0    1    2    3    4
> 

使用的数据:

> m
      [,1] [,2] [,3] [,4] [,5]
 [1,]    0    0    0    0    0
 [2,]    0    0    0    0    0
 [3,]    0    0    0    0    0
 [4,]    0    0    0    0    0
 [5,]    0    0    0    0    0
 [6,]    0    0    0    0    0
 [7,]    0    0    0    0    0
 [8,]    0    0    0    0    0
 [9,]    0    0    0    0    0
[10,]    0    0    0    0    0
> for(i in 2:5) m[,i] <- m[,(i-1)] + 1
> m
      [,1] [,2] [,3] [,4] [,5]
 [1,]    0    1    2    3    4
 [2,]    0    1    2    3    4
 [3,]    0    1    2    3    4
 [4,]    0    1    2    3    4
 [5,]    0    1    2    3    4
 [6,]    0    1    2    3    4
 [7,]    0    1    2    3    4
 [8,]    0    1    2    3    4
 [9,]    0    1    2    3    4
[10,]    0    1    2    3    4
> 

【讨论】:

  • 感谢您的建议。我想遍历矩阵的列。
  • @Joan 这个循环遍历列。
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2011-12-06
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多