我有一个多维数组,里面有13,057个8X11矩阵。
dim(results)
[1] 13057 8 11
每次我索引特定矩阵时,矩阵内的值都会发生变化。例如,我说:
head(results)
[1] 0.2789366 0.1555067 0.3026808 0.1644631 0.2325074 0.3162973
但是当我做的时候
results[1,,]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0.2789366 0.2789366 0.2789366 0.2789366 0.2789366 0.2789366 0.2789366 0.2789366 0.2789366
[2,] 0.1191516 0.1191516 0.1191516 0.1191516 0.1191516 0.1191516 0.1191516 0.1191516 0.1191516
[3,] 0.1805271 0.1805271 0.1805271 0.1805271 0.1805271 0.1805271 0.1805271 0.1805271 0.1805271
[4,] 0.1846702 0.1846702 0.1846702 0.1846702 0.1846702 0.1846702 0.1846702 0.1846702 0.1846702
[5,] 0.4004454 0.4004454 0.4004454 0.4004454 0.4004454 0.4004454 0.4004454 0.4004454 0.4004454
[6,] 0.1336974 0.1336974 0.1336974 0.1336974 0.1336974 0.1336974 0.1336974 0.1336974 0.1336974
[7,] 0.2155045 0.2155045 0.2155045 0.2155045 0.2155045 0.2155045 0.2155045 0.2155045 0.2155045
[8,] 0.5307715 0.5307715 0.5307715 0.5307715 0.5307715 0.5307715 0.5307715 0.5307715 0.5307715
为什么我的所有行都具有相同的值?在我将它放入多维数组之前,这不是这个矩阵的初始值,也不是我在控制台中打印所有矩阵时得到的值。
这是我的代码:
range01 <- function(x){(x-min(x))/(max(x)-min(x))}
results = array(0,dim=c(13057,8,11))
for( i in 1:13057) {
ap <- as.numeric(unlist(ap.dv[i,1:11]))
dv <- as.numeric(unlist(ap.dv[i,12:19]))
m <- outer(ap, dv, FUN="*")
m[is.na(m)] <- 0
m <- range01(m)
results[] <- m
}
感谢。
答案 0 :(得分:2)
在任何数组或矩阵下,实际上只是一个向量
当你在一个数组上调用head
时,你没有找到第一个矩阵的头部,你正在获得向量的头部。看看下面字母的顺序
> LL <- LETTERS[1:24]
> dim(LL) <- c(2, 3, 4)
> head(LL)
[1] "A" "B" "C" "D" "E" "F"
## Have a look at LL:
> LL
, , 1
[,1] [,2] [,3]
[1,] "A" "C" "E"
[2,] "B" "D" "F"
, , 2
[,1] [,2] [,3]
[1,] "G" "I" "K"
[2,] "H" "J" "L"
, , 3
[,1] [,2] [,3]
[1,] "M" "O" "Q"
[2,] "N" "P" "R"
, , 4
[,1] [,2] [,3]
[1,] "S" "U" "W"
[2,] "T" "V" "X"
使用上面的LL
进行游戏,看看第一个元素,LL[[1]]
,seoncd,LL[[2]]
等。
查看LL[1, , ]
和LL[, , 1]
之间的区别。
您可能认为“第一个矩阵”不一定是R
会考虑的内容。
关于为什么你有重复值的问题,答案是你实际上是自己分配这些值。或者更确切地说,您正在分配一个更小(更暗淡)的阵列,而R正在回收。
而不是results[] <- m
,请使用results[i, , ] <- m