【发布时间】: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 <- lapply(matrices, "-")吗?