【发布时间】:2015-07-07 13:45:06
【问题描述】:
我正在努力正确索引下面的一段代码。也许我的数据设置也不理想。
首先,我想比较 abcd b 和 d 中两列之间的值
以及每组生成的RandomNum 行。
如果RandomNum中的行值大于babcd值,
那么它应该 = 0,否则它应该 = 1
结果将是一个包含两个矩阵的列表,一个比较列b
以及使用上述标准针对RandomNum 中的每一组行值(视为向量)的一列或向量d。
结果列表将有 2 个矩阵,维度为 nv * rp,并将保存为列表 UDRandomNum。
然后,我想在UDRandomNum 行或列 3 中的结果值 0 或 1 之间取一个差异,并且每次从 abcd 中的列 b 和 d 中减去它。所以保存在Differences 中的结果将再次有两个矩阵,每个矩阵将一组三个向量与来自b 的同一列b 和d 进行比较。我希望这是有道理的。
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 中的值 > 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)
...
【问题讨论】:
-
您能否分享一个示例,说明您希望如何将列 b 和 d 与 RandomNum 进行比较?
-
@so13eit :我做到了,希望对您有所帮助
-
为什么要创建
pa列? -
RandomNum和UDRandomNum的尺寸也不同——RandomNum的长度为 3,UDRandomNum的长度为 2。