我正在尝试制作一个将值配对的向量。例如,如果第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]
}
}
基本上所有方法都有效,只是花费的时间太长。我确信必须有一种更优化的方法。
我需要配对是随机的,所以首先要配对5万,然后再配对5万就行了。
答案 0 :(得分:0)
也许如果我对您的理解正确,就可以做到
tmp <- 1:100
t1 <- sample(1:100, 50)
t2 <- tmp[-t1]
t2 <- sample(t2)
v2 <- integer(100)
v2[t1] <- t2
v2[t2] <- t1
与您的for
循环相比,结果相同
for(i in 1:100) {
if(tmp[i] %in% t1) {
a <- which(t1 == tmp[i])
v1[i] <- t2[a]
} else {
a <- which(t2 ==tmp[i])
v1[i] <- t1[a]
}
}
identical(v1, v2)
#[1] TRUE