【问题标题】:Reverse sign (+/-) by looping through multiple matrices in R通过循环遍历 R 中的多个矩阵来反转符号 (+/-)
【发布时间】:2020-05-20 07:57:38
【问题描述】:

我有一个包含 2 个矩阵的列表,我想反转每个值的符号(将 + 转为 -,反之亦然)。我对单个矩阵进行了尝试,它起作用了。但是我如何循环多个矩阵呢?


set.seed(20)
data.matrix1 <- matrix(nrow=100, ncol=10)
colnames(data.matrix1) <- c(
  paste("PC", 1:10, sep=""))
rownames(data.matrix1) <- paste("food", 1:100, sep="")
for (i in 1:100) {
  wt.values <- rpois(10, lambda=sample(x=10:1000, size=5))

  data.matrix1[i,] <- c(wt.values)
}

head(data.matrix1)
#>       PC1 PC2 PC3 PC4  PC5 PC6 PC7 PC8 PC9 PC10
#> food1 940 729 294 465  956 862 717 274 587  974
#> food2 451 846 196 511  474 447 833 216 515  475
#> food3 384 104 935  66  939 428 107 991  55  937
#> food4  66 535 295 857 1052  63 526 327 787  955
#> food5  70 633 429 488  316  88 616 451 511  316
#> food6 874 824  12 646  522 844 875  10 650  530

set.seed(50)
data.matrix2 <- matrix(nrow=100, ncol=10)
colnames(data.matrix2) <- c(
  paste("PC", 1:10, sep=""))
rownames(data.matrix2) <- paste("food", 1:100, sep="")
for (i in 1:100) {
  wt.values <- rpois(10, lambda=sample(x=10:1000, size=5))

  data.matrix2[i,] <- c(wt.values)
}

head(data.matrix2)
#>       PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10
#> food1 666 406 198 750 508 719 454 199 748  507
#> food2 614 243 596 149 716 689 234 620 130  685
#> food3 182 589 141  59 735 210 591 132  32  727
#> food4 680 678 881 693  39 685 668 815 756   41
#> food5 505 483 248  48  85 505 460 271  46  103
#> food6 443 164 300 653  54 458 135 298 694   56

matrices <-list(data.matrix1, data.matrix2)



# Reverse sign: single matrix
data.matrix1[sapply(data.matrix1, is.numeric)] <- data.matrix1[sapply(data.matrix1, is.numeric)] * -1

head(data.matrix1)
#>        PC1  PC2  PC3  PC4   PC5  PC6  PC7  PC8  PC9 PC10
#> food1 -940 -729 -294 -465  -956 -862 -717 -274 -587 -974
#> food2 -451 -846 -196 -511  -474 -447 -833 -216 -515 -475
#> food3 -384 -104 -935  -66  -939 -428 -107 -991  -55 -937
#> food4  -66 -535 -295 -857 -1052  -63 -526 -327 -787 -955
#> food5  -70 -633 -429 -488  -316  -88 -616 -451 -511 -316
#> food6 -874 -824  -12 -646  -522 -844 -875  -10 -650 -530

reprex package (v0.3.0) 于 2020-05-20 创建

【问题讨论】:

  • 一个矩阵只能保存一种数据类型。 is.numeric 不是必需的。你就不能matrices &lt;- lapply(matrices, "-")吗?

标签: r loops matrix


【解决方案1】:

您可以一次更改矩阵的所有元素:

data.matrix1 <- -data.matrix1

如果您的矩阵在您的示例代码中的列表中,您可以使用lapply 应用一个函数来更改每个矩阵的符号:

matrices <- lapply(matrices, function(x) -x)

【讨论】:

  • 为什么不像 Roland 的评论那样lapply(matrices, "-")
  • 两种解决方案都可以。在我看来,如果您看到function(x) -x,就更容易想象如何自定义函数来做其他事情,因此它可能对其他有稍微不同问题的人有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2016-02-12
  • 1970-01-01
相关资源
最近更新 更多