0

我正在尝试用随机分布的一组值填充一个矩阵runif,但是对于矢量化操作,种子似乎没有改变(我不知道此时我是否误会了),所以,我想要例如mxn从 mx1 之一创建一个矩阵

  set <- matrix(nrow=10, ncol=1, b=T)

         [,1]
 [1,]   NA
 [2,]   NA
 [3,]   NA
 [4,]   NA
 [5,]   NA
 [6,]   NA
 [7,]   NA
 [8,]   NA
 [9,]   NA
[10,]   NA

现在我想用 R1 个向量(1x3)填充每一行,(第一个坐标是常数),所以我做了:

cbind(set, 1, runif(1, -5, 5), runif(1, -5, 5))[,2:4]
      [,1]      [,2]     [,3]
 [1,]    1 0.3733975 3.968388
 [2,]    1 0.3733975 3.968388
 [3,]    1 0.3733975 3.968388
 [4,]    1 0.3733975 3.968388
 [5,]    1 0.3733975 3.968388
 [6,]    1 0.3733975 3.968388
 [7,]    1 0.3733975 3.968388
 [8,]    1 0.3733975 3.968388
 [9,]    1 0.3733975 3.968388
[10,]    1 0.3733975 3.968388

但是正如你所看到的,它每次都初始化为相同的数字

我也试过:

apply(set,1, function(x){ c(1,runif(2,-5,5)) })

          [,1]      [,2]     [,3]       [,4]       [,5]      [,6]     [,7]      [,8]       [,9]     [,10]
[1,]  1.000000  1.000000 1.000000  1.0000000  1.0000000  1.000000  1.00000  1.000000  1.0000000 1.0000000
[2,] -1.932621  3.939935 4.311493 -1.5389568 -0.8101092  2.414381  3.65576 -3.048565  0.4321976 0.8809179
[3,]  2.473342 -1.889638 1.506515  0.4796991 -4.0810869 -3.723647 -2.55024  4.577043 -0.5506893 1.2699766

但它实际上以相反的方式填充,不像 MARGIN 所说的那样(按行)这实际上没什么大不了的,因为你可以转置它,但我想知道是否是避免这种解决方法的直接方法. 干杯

4

2 回答 2

5

您可以通过这种方式初始化矩阵:

nrows <- 10
ncols <- 15
matrix(runif(nrows * ncols ),nrows,ncols)
于 2013-10-16T20:19:19.107 回答
2

那不应该是:

cbind(set, 1, runif(nrow(set), -5, 5), runif(nrow(set), -5, 5))[,2:4]

自动扩展列向量以填充cbindanddata.frame方法中未填充的位置的 R 习惯不会重新评估表达式。它只是回收任何现有值。

于 2013-10-16T20:17:34.067 回答