【发布时间】:2019-07-05 14:53:10
【问题描述】:
我正在尝试创建一个配对值的向量。例如,如果第 2 个元素是 100,我希望第 100 个元素是 2。从某种意义上说,向量的每个元素都有其各自的对。
我稍后会在函数中使用这个向量。
我目前已尝试以类似的方式使用 mapply 和 for 循环,但这些时间太长了,我一直认为必须有更优化的方式来执行此操作。也许是样本函数的变体?
我想要一个长度为 10^5 的“配对”向量
set.seed(1)
tmp <- 1:10^5
t1 <- c(sample(1:10^5, 5))
t2 <- tmp[-t1]
t2 <- sample(t2)
for (i in 1:10^5) {
if (tmp[i] %in% t1) {
a <- which(t1 == tmp[i])
tmp[i] <- t2[a]
} else {
a <- which(t2 ==tmp[i])
tmp[i] <- t1[a]
}
}
基本上一切正常,只是耗时太长。我确信必须有更优化的方法来做到这一点。
我需要随机配对,所以对第 50 000 个进行配对,然后对其他 50 000 个进行配对是行不通的。
【问题讨论】:
-
对象
v1和a不是向量,而是长度为1 的数字。我不明白你想要的输出是什么?也许发布一个只有 10 个组件而不是 10^5 的较小示例。 -
我不是反对者,但我对你想要完成的事情有点困惑。似乎您设置了 v1,然后从不对其进行任何操作。您能否尝试添加更多关于操作的语言(也许是一个完整的更小的示例?)
-
对不起!我设法我不小心复制了我在 for 循环中的 mapply 版本中使用的代码的混合,这显然没有意义。
标签: r loops optimization