小编Rel*_*_Ai的帖子

从 R 中的列表中检索每个矩阵的信息

一个可重现的例子:

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)

r list matrix lapply sapply

3
推荐指数
1
解决办法
39
查看次数

在 R 中有条件地添加列元素

可重现的例子:

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)

combinations r permutation calculated-columns

3
推荐指数
1
解决办法
81
查看次数

如何从 2 个或更多矩阵的所有可能组合创建矩阵?

假设有两个矩阵:

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)

combinations r matrix combinatorics

3
推荐指数
1
解决办法
110
查看次数

将 R split() 函数转换为 C++

考虑 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++ 中处于尴尬的新手阶段。

c++ split r rcpp

0
推荐指数
2
解决办法
77
查看次数