在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