我有一个x包含5个元素的向量.
x <- (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
我想在每次迭代时删除一个元素并在向量中保留其他元素.(如下所示)
x <- (2,3,4,5) #vector after first iteration
x <- (1,3,4,5) #vector after second iteration
x <- (1,2,4,5) #vector after third iteration
x <- (1,2,3,5) #vector after fourth iteration
Run Code Online (Sandbox Code Playgroud)
还有,是否可以将这些新载体存储在列表中?有没有办法将其扩展到多个向量?
你可以使用combn:
combn(5,4)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 2
[2,] 2 2 2 3 3
[3,] 3 3 4 4 4
[4,] 4 5 5 5 5
Run Code Online (Sandbox Code Playgroud)
要获取数据list:
as.list(data.frame(combn(5,4)))
Run Code Online (Sandbox Code Playgroud)
要在多个向量或矩阵上使用它,首先将其转换为a data.frame,以便更容易lapply地遍历长度(列)data.frame.然后你可以使用lapply与combn像这样:
mat <- data.frame(matrix(1:10,5))
lapply(mat, function(x) combn(x,length(x)-1))
$X1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 2
[2,] 2 2 2 3 3
[3,] 3 3 4 4 4
[4,] 4 5 5 5 5
$X2
[,1] [,2] [,3] [,4] [,5]
[1,] 6 6 6 6 7
[2,] 7 7 7 8 8
[3,] 8 8 9 9 9
[4,] 9 10 10 10 10
Run Code Online (Sandbox Code Playgroud)