НИКОГДА не вызывайте переменную T
. Да, это правильное имя. Да, весь код должен использовать TRUE
для логического значения, но есть достаточно фрагментов кода, где они фактически используют T
для TRUE
. Ты их сломаешь.
Вы можете использовать следующую функцию:
new.order <- function(x){
comp <- function(a,b){
id <- which(match(a,b,0L)==0)
if(id!=nc){
b[nc] <- b[id]
b[id] <- a[nc]
}
b
}
nr <- nrow(x)
nc <- ncol(x)
xlist <- lapply(seq_len(nr),function(i) x[i,])
out <- mapply(comp,xlist[-nr],xlist[-1],SIMPLIFY=FALSE)
do.call(rbind,c(xlist[1],out))
}
Внутренняя функция comp заменит измененный элемент при необходимости. Основная функция использует lapply, чтобы сделать вашу матрицу списком по строкам, а затем mapply, чтобы выполнить сопоставление по всем строкам. И последнее (но не менее важное): вы все связываете вместе.
Это дает
> k<-5
> myT<-t(combn(k+1,k))
> myT
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 1 2 3 4 6
[3,] 1 2 3 5 6
[4,] 1 2 4 5 6
[5,] 1 3 4 5 6
[6,] 2 3 4 5 6
> new.order(myT)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 1 2 3 4 6
[3,] 1 2 3 6 5
[4,] 1 2 6 5 4
[5,] 1 6 4 5 3
[6,] 6 3 4 5 2
Что кажется желаемым результатом.