在单个数组(x)中交换元素是计算机科学中的经典问题。像C这样的低级语言中的直接(但绝不仅仅是,例如,XOR)解决方案是使用临时变量:
x[0] = tmp
x[0] = x[1]
x[1] = tmp
上述算法交换了x的第一个和第二个元素。
在两个子阵列x和y之间交换元素是类似的
x[0] = tmp
x[0] = y[1]
y[1] = tmp
对于3个数组的情况如何,增加的限制是数组1的元素必须与数组2的元素交换,并且数组2的元素必须与数组3的元素交换?数组1和3中的元素不相互交换。
如何将这种方法(带有附加限制)推广到k阵列?
答案 0 :(得分:0)
如果将数组堆叠成矩阵,则可以滞后行以创建所需的操作
k <- 6
#generate dummy data with k rows and 3 columns
mat <- matrix(seq_len(3*k), nrow=k, byrow=TRUE)
mat
#lag the matrix
mat[c(seq_len(k)[-1], 1),]
答案 1 :(得分:0)
你可以创建一个重复你的指令集的for循环:
l=list(x = c(1,2,3,4,5),y = c(5,4,3,2,1),z = c(6,7,8,9,10))
swap_elements <- function(l)
{
for(i in 1:(length(l)-1))
{
tmp = l[[i]][1]
l[[i]][1] = l[[i+1]][2]
l[[i+1]][2] = tmp
}
return(l)
}
输出:
> swap_elements(l)
$x
[1] 4 2 3 4 5
$y
[1] 7 1 3 2 1
$z
[1] 6 5 8 9 10