一个可重现的例子:
mat1 <- matrix(c(1,0,0,0,0,0,1,0,1,0,0,0), nrow = 3, ncol = 4, byrow = T)
mat2 <- matrix(c(0,1,0,0,0,0,1,0,0,0,0,1), nrow = 3, ncol = 4, byrow = T)
ex.list <- list(mat1,mat2)
> ex.list
[[1]]
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 0 1 0
[3,] 1 0 0 0
[[2]]
[,1] [,2] [,3] [,4]
[1,] 0 1 0 0
[2,] 0 0 1 0
[3,] 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
ex.list 由二进制矩阵组成,每个矩阵的行只包含一个 1,其余的用零填充。
对于每个矩阵,我试图返回一个向量,该向量指示每行 1 的列号。
预期输出:
[,1] [,2] [,3] …Run Code Online (Sandbox Code Playgroud) 可重现的例子:
set.seed(1)
testMat <- matrix(round(runif(3*6,1,5)), nrow = 3, ncol = 6)
Run Code Online (Sandbox Code Playgroud)
输出:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2 5 5 1 4 3
[2,] 2 2 4 2 3 4
[3,] 3 5 4 2 4 5
Run Code Online (Sandbox Code Playgroud)
这里前 3 列 (1,2,3) 属于一个集合,接下来的 3 列 (4,5,6) 属于另一个集合。我想从每组中添加一列,并且需要为所有可能的组合添加一列。
对于这个例子,我应该得到 9 个结果向量,因为有 9 种组合:
Combination 1: (1,4) = (3,4,5)
Combination 2: (1,5) = (6,5,7)
Combination 3: (1,6) = (.,.,.)
Combination 4: (2,4) = (.,.,.)
Combination 5: (2,5) = (.,.,.)
Combination 6: …Run Code Online (Sandbox Code Playgroud) 假设有两个矩阵:
A <- B <- diag(3)
> A
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
Run Code Online (Sandbox Code Playgroud)
我想创建一个新矩阵 AB,它由 A 和 B 行的所有可能组合组成。预期结果:
> AB
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 1 0 0
[2,] 1 0 0 0 1 0
[3,] 1 0 0 0 0 1
[4,] 0 1 0 1 0 0
[5,] 0 1 0 0 1 0
[6,] 0 1 0 0 0 1
[7,] …Run Code Online (Sandbox Code Playgroud) 考虑 R 中的可重现示例:
test <- c(1:12)
> test
[1] 1 2 3 4 5 6 7 8 9 10 11 12
Run Code Online (Sandbox Code Playgroud)
预期结果:
test.list <- split(test, gl(2, 3))
> test.list
$`1`
[1] 1 2 3 7 8 9
$`2`
[1] 4 5 6 10 11 12
Run Code Online (Sandbox Code Playgroud)
我正在尝试用 C++ 编写等效的代码来生成并返回由 test.list 产生的两个向量。请注意,我在 C++ 中处于尴尬的新手阶段。
r ×4
combinations ×2
matrix ×2
c++ ×1
lapply ×1
list ×1
permutation ×1
rcpp ×1
sapply ×1
split ×1