solve_LSAP
возвращает индексы столбцов по каждой строке, поэтому включает в себя все необходимое для восстановления:
len <- length(y)
parsedMat <- cbind(
1:len,
as.integer(y)
)
parsedMat
[,1] [,2]
[1,] 1 3
[2,] 2 1
[3,] 3 2
Это можно превратить в решенную матрицу с помощью:
solvedMat <- matrix(0, nrow = len, ncol = len)
solvedMat[parsedMat] <- 1
solvedMat
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 0
[3,] 0 1 0
Вы также можете превратить это в функцию, которая будет возвращать оба выхода в виде списка, например:
parseClueOutput <- function(x) {
len <- length(x)
parsedMat <- cbind(
1:len,
as.integer(x)
)
solvedMat <- matrix(0, nrow = len, ncol = len)
solvedMat[parsedMat] <- 1
return(
list(
parsedMat = parsedMat,
solvedMat = solvedMat
)
)
}
И использовать его как:
parseClueOutput(y)
$parsedMat
[,1] [,2]
[1,] 1 3
[2,] 2 1
[3,] 3 2
$solvedMat
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 0
[3,] 0 1 0
Что касается структуры, solve_LSAP
на самом деле не сложный объект, это по сути числовой c вектор, который вы можете видеть с помощью:
is.numeric(y)
[1] TRUE
Или:
str(y)
'solve_LSAP' num [1:3] 3 1 2
Вы также можете легко превратить solvedMat
или parsedMat
в кадр данных - например, parsedMat
:
setNames(as.data.frame(parsedMat), c('Row', 'Column'))
Row Column
1 1 3
2 2 1
3 3 2