【问题标题】:Conditional subtraction of matrix in RR中矩阵的条件减法
【发布时间】:2020-11-29 19:48:59
【问题描述】:

我正在尝试对 R 中的矩阵进行条件减法。假设我有一个矩阵列表A, B, C。如果我的selection = 1,那么C = A - B。这是我的代码:

selection = 1

A <- matrix(c(1:10), nrow = 5, ncol = 2)
A
B <- matrix(c(11:20), nrow = 5, ncol = 2)
B
C <- matrix(0, nrow = 5, ncol = 2)
C

my_matrix_name <- as.vector(c("A", "B", "C"))
my_list = list(A, B, C)
names(my_list) <- my_matrix_name

my_list$C <- ifelse(selection == 1, my_list$A - my_list$B, "Error")

以上代码对my_list 产生以下结果:

> my_list
$A
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

$B
     [,1] [,2]
[1,]   11   16
[2,]   12   17
[3,]   13   18
[4,]   14   19
[5,]   15   20

$C
[1] -10

但我想要的输出是这样的:

> my_list
$A
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

$B
     [,1] [,2]
[1,]   11   16
[2,]   12   17
[3,]   13   18
[4,]   14   19
[5,]   15   20

$C
    [,1] [,2]
[1,]  -10  -10
[2,]  -10  -10
[3,]  -10  -10
[4,]  -10  -10
[5,]  -10  -10

请帮忙!谢谢!

【问题讨论】:

  • 您误用了ifelse,如果您仔细研究了它的文档,也不会感到惊讶。请改用if (...) ... else ...

标签: r list matrix subtraction


【解决方案1】:

使用if,因为您检查的条件是标量而不是向量。

my_list$C <- if(selection == 1) my_list$A - my_list$B else 'Error'
my_list

#$A
#     [,1] [,2]
#[1,]    1    6
#[2,]    2    7
#[3,]    3    8
#[4,]    4    9
#[5,]    5   10

#$B
#     [,1] [,2]
#[1,]   11   16
#[2,]   12   17
#[3,]   13   18
#[4,]   14   19
#[5,]   15   20

#$C
#     [,1] [,2]
#[1,]  -10  -10
#[2,]  -10  -10
#[3,]  -10  -10
#[4,]  -10  -10
#[5,]  -10  -10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多