我正在发布代码,因为它会出现在我的程序中,以更好地说明我所面临的挑战。
N = 6
land_l = rep(list(0:1), N)
land_pos = expand.grid(land_l) #gives a list of all permutations
h = 2 # the position in land_pos of interest, here [2]
k = list(c(2, 4, 5), c(4,5)) #representative list structure of a list of other elements
start_pos = matrix(c(0,1,1,1,0,1), nrow=1, ncol=6, byrow=TRUE)
perm_pos = matrix(start_pos, nrow = 2^length(k[[1]]), ncol = N, byrow = TRUE )
我现在想改变矩阵" perm_pos"因此它反映了h和k [[1]]的所有可能的排列,不包括它自己。也就是说,h = 2并且k [[1]]是2,4,5。我正在寻找元素2,4,5的所有排列(即,0 0 0,1 0 0,1 1 0等等)当perm_pos中的其他元素保持不变时。)
那么perm_pos应该是这样的(每个唯一排列发生的行的顺序并不重要):
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 1 1 1 0 1
[2,] 0 1 1 1 1 1
[3,] 0 1 1 0 0 1
[4,] 0 1 1 0 1 1
[5,] 0 0 1 1 0 1
[6,] 0 0 1 1 1 1
[7,] 0 0 1 0 0 1
[8,] 0 0 1 0 1 1
感谢您的帮助!
答案 0 :(得分:0)
可能的解决方案如下。
tmp_l = rep(list(0:1), length(k[[1]]))
tmp_pos = expand.grid(tmp_l)
perm_pos_adj = perm_pos
for(i in 1:nrow(tmp_pos))
{
counter = 0
for(j in k[[1]])
{
counter = counter+1
perm_pos_adj[i,j] = tmp_pos[i,counter]
}
}
perm_pos_adj提供搜索结果。