R: Как я могу хранить в матрице различные случайные числа, сгенерированные al oop? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу сгенерировать 10 раз по 20 случайных чисел от 1 до 100. Таким образом, итоговая матрица должна включать в себя всего 200 чисел. Вот мой способ, как я пытался это решить:

x <- 10
N <- 20
A <- matrix()

for (i in 1:x) {
  
  A[i] <- sample(1:100, N, FALSE)
  
}

A

В результате что-то вроде не так с A.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

При индексировании отсутствует запятая. Я прав, что каждая строка одной и той же матрицы должна быть заполнена случайными числами?

x <- 10
N <- 20
A <- matrix(data = NA, nrow = x, ncol = N)

for (i in 1:x) {
  
  A[i,] <- sample(1:100, N, TRUE)
  
}

A
#>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
#>  [1,]   13   20   13   20   13   18   17    2   18     8     5    17    18
#>  [2,]    1    7   18   15    3   20    4    4   13    10     7     6    15
#>  [3,]    7    3    1   16   12   19   16   16   16    17    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

Если вы не ищете выборку без замены, самым быстрым способом должно быть заполнение команды матрицы напрямую с помощью данные выборки:

matrix(sample(1:100, 200, TRUE), 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

Создано 2020-08-04 пакетом REPEX (v0.3.0)

0 голосов
/ 04 августа 2020

В дополнение к ответу выше ознакомьтесь с оболочкой replicate, чтобы получить более краткое решение, которое не требует al oop. Это даст вам практически тот же результат, хотя каждая из 10 случайных выборок из 20 будет проходить по столбцам, а не по строкам (что эквивалентно транспонированию более раннего решения).

set.seed(100) # to make the results reproducible

x <- 10
N <- 20

replicate(x, sample(1:100, N, FALSE))
       [,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

Если вы хотите иметь 10 выборок по строкам, используйте функцию t:

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
...