在R中生成具有列和约束的矩阵

在R中生成具有列和约束的矩阵,r,matrix,R,Matrix,例如,我可以很容易地指定任意矩阵,如 x <- matrix(c(10,0.25,0.25,0.25,0.25,0.25, 10,0.25,0.25,0.25,0.25,0.25, 10,0.25,0.25,0.25,0.25,0.25, 10,0.25,0.25,0.25,0.25,0.25), nrow = 4, ncol = 6, byrow = TRUE) x好的,我会

例如,我可以很容易地指定任意矩阵,如

x <- matrix(c(10,0.25,0.25,0.25,0.25,0.25,
              10,0.25,0.25,0.25,0.25,0.25,
              10,0.25,0.25,0.25,0.25,0.25,
              10,0.25,0.25,0.25,0.25,0.25),
              nrow = 4, ncol = 6, byrow = TRUE)

x好的,我会把我的评论放在回答中

x <- matrix(c(10,0.25,0.25,0.25,0.25,0.25,
              10,0.25,0.25,0.25,0.25,0.25,
              10,0.25,0.25,0.25,0.25,0.25,
              10,0.25,0.25,0.25,0.25,0.25),
              nrow = 4, ncol = 6, byrow = TRUE)
alpha <- colSums(x) + runif(ncol(x), 0, abs(mean(x)))
y <- t(t(x) / alpha)

> x
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   10 0.25 0.25 0.25 0.25 0.25
[2,]   10 0.25 0.25 0.25 0.25 0.25
[3,]   10 0.25 0.25 0.25 0.25 0.25
[4,]   10 0.25 0.25 0.25 0.25 0.25
> y
          [,1]      [,2]       [,3]       [,4]      [,5]      [,6]
[1,] 0.2397915 0.1814021 0.09312788 0.09021147 0.1116572 0.1147005
[2,] 0.2397915 0.1814021 0.09312788 0.09021147 0.1116572 0.1147005
[3,] 0.2397915 0.1814021 0.09312788 0.09021147 0.1116572 0.1147005
[4,] 0.2397915 0.1814021 0.09312788 0.09021147 0.1116572 0.1147005

> alpha  ## random scaling factor
[1] 41.702890  1.378154  2.684481  2.771266  2.238996  2.179589

> colSums(y)
[1] 0.9591661 0.7256085 0.3725115 0.3608459 0.4466288 0.4588021
然后继续。如果您希望第三列也不受影响,请执行以下操作

alpha[c(1,3)] <- 1
但如果我们播下种子:

set.seed(0); runif(4)
## [1] 0.8966972 0.2655087 0.3721239 0.5728534
set.seed(0); runif(4)
## [1] 0.8966972 0.2655087 0.3721239 0.5728534
如果不使用种子,随机数是不可复制的。我没有将
set.seed(0)
放在
alpha
之前,因此当运行代码时,您将看到不同的
alpha
y


种子可以是任何整数,不一定是0。例如,2016年和2016年都有效。但是对于不同的种子,你会得到不同的随机数集。但是,无论何时使用相同的种子,随机数都是相同的。

谢谢。让我试试这个。。我是新来R的。你说“没有播种”是什么意思?非常感谢。还有一条评论。使用此方法,我可以将特定列和控制为Thnks。。有趣。它起作用了!!我只是想知道“optim()”对此会有什么反应?我将“x”矩阵作为变量传递给Optim,然后根据建议,我们再次更改矩阵值。我觉得会有不匹配的情况。我将调试并尝试。我喜欢您在这个场景中的建议。我会保持原样。它可能会使其他人受益。我将发布另一个问题来解释这个问题。干杯
runif(4)
## [1] 0.1300864 0.5689224 0.5594464 0.8778068
runif(4)
## [1] 0.3320244 0.5838847 0.0466045 0.2594867
set.seed(0); runif(4)
## [1] 0.8966972 0.2655087 0.3721239 0.5728534
set.seed(0); runif(4)
## [1] 0.8966972 0.2655087 0.3721239 0.5728534