我正在努力正确索引下面的代码段。也许我的数据设置也不理想。
首先,我想比较abcd
b
和d
中两列之间的值
以及每组生成的RandomNum
行。
如果RandomNum
中的行值大于b
abcd
值,
那么它应该= 0,否则它应该= 1
结果将是一个包含两个矩阵的列表,一个比较列b
使用上述标准对d
中的每组行值(作为向量)进行一列或向量RandomNum
。
结果列表将包含2个矩阵,其维度为nv
* rp
,并将保存为列表UDRandomNum
。
然后,我想在UDRandomNum
行或列3中的结果值0或1之间取一个差异,每次从b
中的d
和abcd
列中扣除它。因此,Differences
中保存的结果将再次具有两个矩阵,每个矩阵将三个向量集与来自b
的同一列d
和abcd
进行比较。我希望这是有道理的。
set.seed(101)
a <- c(0.1,0.2,0.3)
b <- c(0.8,0.2,0.5)
c <- c(0.4,0.9,1.0)
d <- c(0.7,0.9,0.2)
ab <- cbind(a,b)
cd <- cbind(c,d)
abcd <- list(ab,cd)
rp <- 100
nv <- length(a)
RandomNum <- vector("list",length(a))
# Draw random values between 0 and 1 from the uniform distribution
for (i in 1:length(a)) {
RandomNum[[i]] <- t(replicate(rp, runif(nv, min=0,max=1)))
}
有问题的作品从这里开始:
UDRandomNum <- vector("list",length(abcd))
for (i in 1:length(abcd)) {
UDRandomNum[[i]] <- RandomNum[[i]][i] <
abcd[[i]][,2][col(RandomNum[[i]])]+0
}
# Later, I want to take the difference between the outcomes (1 or 0)
Differences <- vector("list",length(abcd))
for (i in 1:length(abcd)) {
Differences[[i]] <- abs(sweep(UDRandomNum,2,abcd[,2]))
}
所以我的RandomNum我的结果始于:
[[1]]
[,1] [,2] [,3]
[1,] 0.076929106 0.42883794 0.502711454
[2,] 0.254765247 0.57422550 0.578616861
[3,] 0.270195792 0.30920944 0.094095268
[4,] 0.512404975 0.97536980 0.082336057
...
我将它与b
进行比较:0.8,0.2,0.5(如果RandomNum中的值为&gt; b则为0,否则为1)
UDRandomNum:
[[1]]
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 1 0 0
[3,] 1 0 1
[4,] 1 0 1
...
最后,我会从b
中扣除UDRandomNum中的值,因此Differences
中的结果将会跟随(无论为方便起见,我输入的方程结果如何,但它应该是由此公式得出的数字)
[[1]]
[,1] [,2] [,3]
[1,] abs(1-0.076929106) abs(0-0.42883794) abs(0-0.502711454)
[2,] abs(1-0.254765247) abs(0-0.57422550) abs(0-0.578616861)
[3,] abs(1-0.270195792) abs(0-0.30920944) abs(1-0.094095268)
[4,] abs(1-0.512404975) abs(0-0.97536980) abs(1-0.082336057)
...
答案 0 :(得分:0)
UDRandomNum <- vector("list",length(abcd))
for (i in 1:length(abcd)) {
UDRandomNum[[i]] <- RandomNum[[1]] <
matrix(abcd[[i]][,2][col(RandomNum[[i]])], ncol=3)
}
Differences <- vector("list",length(abcd))
for (i in 1:length(abcd)) {
Differences[[i]] <- abs(UDRandomNum[[i]] - RandomNum[[i]])
}
<强>解释强>
使用UDRandomNum
列表,尝试将abcd
b和d列更改为与RandomNum
维度匹配的矩阵。对于Differences
列表,当您减去两个矩阵TRUE
和FALSE
时,R会自动将UDRandomNum
和RandomNum
结果强制转换为1和0。 / p>