R:如何将循环生成的各种随机数存储在矩阵中?
我想在1到100之间生成10乘以20的随机数。因此,最终矩阵应包括总共200个数字。 这是我的方式,我是如何试图解决它的:R:如何将循环生成的各种随机数存储在矩阵中?,r,matrix,random,storage,sampling,R,Matrix,Random,Storage,Sampling,我想在1到100之间生成10乘以20的随机数。因此,最终矩阵应包括总共200个数字。 这是我的方式,我是如何试图解决它的: x <- 10 N <- 20 A <- matrix() for (i in 1:x) { A[i] <- sample(1:100, N, FALSE) } A x索引时缺少逗号。我是对的,同一矩阵的每一行都应该用随机数填充 x[3,]7 3 1 16 12 16 16 15 14 19 #> [4,] 15 19
x <- 10
N <- 20
A <- matrix()
for (i in 1:x) {
A[i] <- sample(1:100, N, FALSE)
}
A
x索引时缺少逗号。我是对的,同一矩阵的每一行都应该用随机数填充
x[3,]7 3 1 16 12 16 16 15 14 19
#> [4,] 15 19 4 6 4 5 4 5 8 12 20 14 17
#> [5,] 14 4 9 7 18 10 12 12 12 20 14 10 9
#> [6,] 19 4 19 7 6 1 17 6 8 3 4 1 1
#> [7,] 10 19 8 7 8 16 10 9 6 5 1 12 3
#> [8,] 15 9 9 11 1 15 10 14 19 8 7 18 15
#> [9,] 19 3 19 8 8 18 7 1 18 15 18 1 17
#> [10,] 19 4 20 7 6 12 12 14 15 13 14 16 7
#> [,14] [,15] [,16] [,17] [,18] [,19] [,20]
#> [1,] 15 5 8 4 5 2 1
#> [2,] 5 12 19 11 13 18 11
#> [3,] 10 14 15 7 8 11 13
#> [4,] 2 4 2 11 12 6 2
#> [5,] 15 14 13 11 10 5 14
#> [6,] 14 16 6 12 6 2 13
#> [7,] 5 4 15 2 1 14 9
#> [8,] 8 10 5 2 2 14 13
#> [9,] 19 14 1 16 7 16 15
#> [10,] 18 4 20 4 12 3 11
如果您不希望在不替换的情况下进行采样,最快的方法应该是直接用采样数据填充矩阵命令:
矩阵(样本(1:100200,真),10,20)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
#> [1,] 100 27 99 82 15 55 27 35 77 89 16 45 10
#> [2,] 3 96 80 87 90 51 10 4 32 40 37 29 49
#> [3,] 99 97 30 32 34 27 56 12 62 36 57 64 25
#> [4,] 23 29 4 60 52 71 100 26 18 19 97 9 15
#> [5,] 77 76 63 94 27 33 68 6 42 46 100 22 43
#> [6,] 43 84 89 90 22 90 44 59 8 71 79 14 2
#> [7,] 97 40 39 3 91 26 26 32 33 53 75 1 65
#> [8,] 77 91 45 36 44 92 37 22 46 73 66 100 23
#> [9,] 44 85 42 98 80 91 32 60 42 85 52 22 11
#> [10,] 6 4 51 96 82 13 72 8 3 61 50 92 91
#> [,14] [,15] [,16] [,17] [,18] [,19] [,20]
#> [1,] 90 17 13 52 61 75 65
#> [2,] 53 75 3 55 82 69 73
#> [3,] 21 46 60 43 76 72 58
#> [4,] 33 26 92 92 19 97 62
#> [5,] 15 92 36 63 44 35 59
#> [6,] 9 66 17 35 50 18 13
#> [7,] 36 19 92 94 77 55 56
#> [8,] 9 54 86 58 69 68 11
#> [9,] 25 65 61 97 45 94 86
#> [10,] 52 42 18 4 94 49 58
由(v0.3.0)于2020-08-04创建除了上面的答案之外,还可以查看replicate
包装器以获得更简洁的解决方案,该解决方案不需要循环。它将给出基本相同的结果,尽管10个随机样本(20个)中的每一个都将沿着列而不是行运行(这相当于先前解决方案的转置)
如果要沿行放置10个样本,请使用t
功能:
set.seed(100)
t(replicate(x, sample(1:100, N, FALSE)))
即将发布类似的答案,并评论for循环不是最佳策略。因为问题是如何将这些值存储在矩阵中
我认为有必要指出,同样的任务可以通过矩阵(round(runif(200,1100)),nrow=10)这样的方法更有效地完成。也许你可以把这个加到你的答案里?
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 74 2 41 55 42 19 50 87 20 46
[2,] 89 51 100 47 76 95 12 30 64 89
[3,] 78 68 24 68 37 23 60 82 79 64
[4,] 23 98 43 12 26 76 45 97 15 19
[5,] 86 52 7 51 24 26 37 71 100 11
[6,] 70 48 63 16 12 5 68 74 50 76
[7,] 4 32 65 56 9 78 73 49 47 20
[8,] 55 85 9 22 55 40 26 2 55 74
[9,] 95 91 20 82 75 81 27 11 18 100
[10,] 7 39 14 53 63 97 31 47 89 82
[11,] 91 16 78 3 35 64 46 1 53 28
[12,] 93 75 88 5 58 54 71 95 84 16
[13,] 43 66 3 44 97 42 21 32 11 69
[14,] 82 70 36 85 48 3 39 73 77 7
[15,] 61 45 27 28 80 80 65 13 22 81
[16,] 12 30 46 52 98 38 16 62 52 56
[17,] 51 93 59 25 18 43 82 92 39 37
[18,] 72 29 85 42 72 83 8 58 31 72
[19,] 18 31 69 15 83 4 10 14 78 93
[20,] 25 54 47 57 66 74 69 42 76 5
set.seed(100)
t(replicate(x, sample(1:100, N, FALSE)))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,] 74 89 78 23 86 70 4 55 95 7 91 93 43 82 61 12 51 72 18 25
[2,] 2 51 68 98 52 48 32 85 91 39 16 75 66 70 45 30 93 29 31 54
[3,] 41 100 24 43 7 63 65 9 20 14 78 88 3 36 27 46 59 85 69 47
[4,] 55 47 68 12 51 16 56 22 82 53 3 5 44 85 28 52 25 42 15 57
[5,] 42 76 37 26 24 12 9 55 75 63 35 58 97 48 80 98 18 72 83 66
[6,] 19 95 23 76 26 5 78 40 81 97 64 54 42 3 80 38 43 83 4 74
[7,] 50 12 60 45 37 68 73 26 27 31 46 71 21 39 65 16 82 8 10 69
[8,] 87 30 82 97 71 74 49 2 11 47 1 95 32 73 13 62 92 58 14 42
[9,] 20 64 79 15 100 50 47 55 18 89 53 84 11 77 22 52 39 31 78 76
[10,] 46 89 64 19 11 76 20 74 100 82 28 16 69 7 81 56 37 72 93 5