gpt4 book ai didi

r - 生成逆排列

转载 作者:行者123 更新时间:2023-12-03 23:28:40 24 4
gpt4 key购买 nike

假设我们有一个向量 foo我们必须临时置换它(排序或重新排序),计算一些向量 bar在它的基础上,最后将两者置换回来 foobarfoo 的原始订单- 这意味着逆排列:

foo <- c(1, 7, 3, 5, 2)
o <- order(foo)
foo <- foo[o] # Now foo is permuted, and sorted: foo == 1 2 3 5 7
bar = 2 * foo # bar == 2 4 6 10 14

这里应该是你的答案,这样我们就有了以下所需的最终值:
foo == 1 7 3 5 2
bar == 2 14 6 10 4

这个怎么做?

请不要简单地回复:“你可以做 bar = 2 * foo 而不是置换它”。这只是一个简单的例子。在某些情况下,我们必须排序 foo为了效率(快速搜索它)或类似的东西。

最佳答案

这会起作用,因为 [order(o)]反转 [o] 的 Action :

foo <- c(1, 7, 3, 5, 2)
o <- order(foo)

(foo[o]*2)[order(o)]
# [1] 2 14 6 10 4

为了表明它更普遍地工作:
testAlgorithm <- function(foo) {
o <- order(foo)
identical(foo, foo[o][order(o)])
}

x <- c(1, 7, 3, 5, 2)
y <- c(1,2,5,7,4, 99, 88, 3, 0)
z <- sample(1000) ## (No ties)
zz <- sample(1000, replace=TRUE) ## (Many ties)
all(sapply(list(x,y,z,zz), testAlgorithm))
[1] TRUE

关于r - 生成逆排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com