如何在R中使用"for"循环编写矩阵?

Tar*_*kus 2 for-loop r matrix

因此,对于我目前正在进行的数据评估,我想使用"for"循环编写矩阵.

假设我有0到100之间的随机数:

E <- runif(100, 0, 100)

t <- 0 #start

for(t in 0:90) {
   D <- length(E[E >= t, E < (t + 10)])
   t = t + 10
}
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是在每次迭代时将"D"写入矩阵,其中"t"在一列中,"D"在另一列中.

我听说你应该避免R中的循环,但我不知道另一种选择.

Dav*_*son 5

您可以执行此sapply操作,而不是使用循环,该操作对序列中的每个项目进行操作并将结果存储在向量中,然后cbind创建矩阵:

E <- runif(100, 0, 100)
t <- seq(0, 90, 10)

D <- sapply(t, function(ti) {
  sum(E >= ti & E < (ti + 10))
})

cbind(t, D)
#>        t  D
#>  [1,]  0 11
#>  [2,] 10 12
#>  [3,] 20 14
#>  [4,] 30 11
#>  [5,] 40  9
#>  [6,] 50 12
#>  [7,] 60  7
#>  [8,] 70  7
#>  [9,] 80  6
#> [10,] 90 11
Run Code Online (Sandbox Code Playgroud)

请注意,我也使用sum(E >= ti & E < (ti + 10))而不是length(length(E[E >= ti & E < (ti + 10)])),作为一个稍微短一点的方法来查找E大于t但小于的项目数t + 10.

  • @Tarkus欢迎你.请注意,对于这个*特定的*应用程序,你也可以选择`cbind(t,table(findInterval(E,t)))`,因为`findInterval`在binning项目方面做你正在寻找的东西,并且` table`计算值. (2认同)