这是带有for 循环的基本 R 选项
out <- list()
for (i in 1:(length(yy)-1)) {
for (j in (i+1):length(yy)) {
out[[length(out)+1]] <- replace(yy,c(i,j),yy[c(j,i)])
}
}
给了
> out
[[1]]
[1] 22 21 8 24
[[2]]
[1] 8 22 21 24
[[3]]
[1] 24 22 8 21
[[4]]
[1] 21 8 22 24
[[5]]
[1] 21 24 8 22
[[6]]
[1] 21 22 24 8
如果你想让它作为一个函数工作:
f <- function(yy) {
out <- list()
for (i in 1:(length(yy)-1)) {
for (j in (i+1):length(yy)) {
out[[length(out)+1]] <- replace(yy,c(i,j),yy[c(j,i)])
}
}
out
}
编辑
如果你想在两个向量之间做类似的交换操作,你可以试试下面的代码
yy <- c(21, 22, 8, 24)
xx <- c(5, 7, 9, 12)
out <- list()
u <- c(yy, xx)
for (i in seq_along(yy)) {
for (j in length(yy) + seq_along(xx)) {
z <- replace(u, c(i, j), u[c(j, i)])
out[[length(out) + 1]] <- list(yy = z[seq_along(yy)], xx = z[-seq_along(yy)])
}
}
这样
> out
[[1]]
[[1]]$yy
[1] 5 22 8 24
[[1]]$xx
[1] 21 7 9 12
[[2]]
[[2]]$yy
[1] 7 22 8 24
[[2]]$xx
[1] 5 21 9 12
[[3]]
[[3]]$yy
[1] 9 22 8 24
[[3]]$xx
[1] 5 7 21 12
[[4]]
[[4]]$yy
[1] 12 22 8 24
[[4]]$xx
[1] 5 7 9 21
[[5]]
[[5]]$yy
[1] 21 5 8 24
[[5]]$xx
[1] 22 7 9 12
[[6]]
[[6]]$yy
[1] 21 7 8 24
[[6]]$xx
[1] 5 22 9 12
[[7]]
[[7]]$yy
[1] 21 9 8 24
[[7]]$xx
[1] 5 7 22 12
[[8]]
[[8]]$yy
[1] 21 12 8 24
[[8]]$xx
[1] 5 7 9 22
[[9]]
[[9]]$yy
[1] 21 22 5 24
[[9]]$xx
[1] 8 7 9 12
[[10]]
[[10]]$yy
[1] 21 22 7 24
[[10]]$xx
[1] 5 8 9 12
[[11]]
[[11]]$yy
[1] 21 22 9 24
[[11]]$xx
[1] 5 7 8 12
[[12]]
[[12]]$yy
[1] 21 22 12 24
[[12]]$xx
[1] 5 7 9 8
[[13]]
[[13]]$yy
[1] 21 22 8 5
[[13]]$xx
[1] 24 7 9 12
[[14]]
[[14]]$yy
[1] 21 22 8 7
[[14]]$xx
[1] 5 24 9 12
[[15]]
[[15]]$yy
[1] 21 22 8 9
[[15]]$xx
[1] 5 7 24 12
[[16]]
[[16]]$yy
[1] 21 22 8 12
[[16]]$xx
[1] 5 7 9 24