使用 apply 在 R 中排列数组的值
Rank values of an array in R with apply
我需要在第三个轴上对数组的值进行排序。
我有一个这样的数组:
a <- array(c(1:9,11:19,21:29),dim = c(3,3,3))
预期结果是一个排名第一的矩阵,我希望这样计算:apply(X = a, MARGIN = c(1,2), FUN = rank)[, ,1]
# expected result because a[,,1] is the minimal value of my array
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
然而 apply
函数 return 我是另一个数组,这很奇怪,因为当我使用 mean
、[=16= 等其他函数时它 return 是一个矩阵] 或 sort
。
我检查过 apply(a, c(1,2), print)
并且它打印了我感兴趣的排名向量(例如它在第一次迭代时打印 1 11 21
)。
我可以用 for 循环对此进行编码,但至少我很好奇这种情况下到底是什么问题。
# The for loop to obtain the good result
a2 <- a[,,1]
for(i in seq(dim(a)[1])){
for(j in seq(dim(a)[2])){
a2[i,j] <- rank(a[i,j,])[1]
}
}
提前致谢!
尝试
apply(a, c(1,2), function(x) rank(x)[1])
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 1 1 1
# [3,] 1 1 1
您可以使用 [1,,]
而不是 [,,1]
,即
apply(X = a, MARGIN = c(1,2), FUN = rank)[1,,]
这样
> apply(X = a, MARGIN = c(1,2), FUN = rank)[1,,]
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
我需要在第三个轴上对数组的值进行排序。 我有一个这样的数组:
a <- array(c(1:9,11:19,21:29),dim = c(3,3,3))
预期结果是一个排名第一的矩阵,我希望这样计算:apply(X = a, MARGIN = c(1,2), FUN = rank)[, ,1]
# expected result because a[,,1] is the minimal value of my array
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
然而 apply
函数 return 我是另一个数组,这很奇怪,因为当我使用 mean
、[=16= 等其他函数时它 return 是一个矩阵] 或 sort
。
我检查过 apply(a, c(1,2), print)
并且它打印了我感兴趣的排名向量(例如它在第一次迭代时打印 1 11 21
)。
我可以用 for 循环对此进行编码,但至少我很好奇这种情况下到底是什么问题。
# The for loop to obtain the good result
a2 <- a[,,1]
for(i in seq(dim(a)[1])){
for(j in seq(dim(a)[2])){
a2[i,j] <- rank(a[i,j,])[1]
}
}
提前致谢!
尝试
apply(a, c(1,2), function(x) rank(x)[1])
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 1 1 1
# [3,] 1 1 1
您可以使用 [1,,]
而不是 [,,1]
,即
apply(X = a, MARGIN = c(1,2), FUN = rank)[1,,]
这样
> apply(X = a, MARGIN = c(1,2), FUN = rank)[1,,]
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1