R 循环矩阵中的每一行
我有一个12列20行的矩阵。基本上只是平方自相关系数。我想对每一行做一个测试,如下所示:R 循环矩阵中的每一行,r,loops,matrix,statistics,R,Loops,Matrix,Statistics,我有一个12列20行的矩阵。基本上只是平方自相关系数。我想对每一行做一个测试,如下所示: new_mat <- apply(values_tb, 1, function(x) n * (n + 2) * (x/(n - seq_along(x)))) values_tbl1 <- as_tibble(`colnames<-`(t(new_mat), paste0("Q_k", 1:12))) QTL;DR:代码可以固定,提高效率,并缩短为两行: 您的代码有
new_mat <- apply(values_tb, 1, function(x) n * (n + 2) * (x/(n - seq_along(x))))
values_tbl1 <- as_tibble(`colnames<-`(t(new_mat), paste0("Q_k", 1:12)))
QTL;DR:代码可以固定,提高效率,并缩短为两行:
您的代码有一些地方需要改进。主要是逻辑错误。您在1:12中对j运行循环,从矩阵中提取一列,然后在1:20循环中对k中的二十个元素中的每一个计算公式。到目前为止,一切顺利。但是,您当时只将该列的前12个元素作为values_tbl1中的新行。由于要对12列执行此操作,因此只能向结果中添加12行。因此,您似乎无意中进行了换位,从而截断了结果
代码中跳出的另一件事是它没有利用R的内置矢量化。区块:
for (k in 1:20) {
Q <- n*(n+2)*(value_squard[k]/(n-k))
value_vector1 <- append(value_vector1, Q)
}
但事实上,在此之后,您只使用过一次value_squard,所以实际上整个部分:
vector_j <- values_tb[,j]
value_squard <- vector_j
for (k in 1:20) {
Q <- n*(n+2)*(value_squard[k]/(n-k))
value_vector1 <- append(value_vector1, Q)
}
给你最后的结果:
values_tbl1
#> # A tibble: 20 x 12
#> Q_k1 Q_k2 Q_k3 Q_k4 Q_k5 Q_k6 Q_k7 Q_k8 Q_k9 Q_k10 Q_k11 Q_k12
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 533. 435. 999. 546. 688. 792. 551. 272. 435. 196. 1000. 573.
#> 2 771. 170. 312. 102. 472. 43.3 604. 725. 984. 541. 580. 746.
#> 3 648. 640. 484. 25.2 607. 675. 74.7 296. 10.1 309. 954. 255.
#> 4 868. 324. 666. 593. 749. 519. 442. 735. 186. 131. 857. 146.
#> 5 370. 147. 219. 14.1 990. 640. 954. 378. 609. 965. 815. 897.
#> 6 872. 233. 18.1 873. 607. 715. 72.7 490. 411. 588. 106. 413.
#> 7 172. 664. 97.5 412. 729. 422. 599. 406. 302. 339. 799. 789.
#> 8 790. 635. 255. 472. 823. 947. 89.8 993. 839. 684. 564. 427.
#> 9 175. 95.4 409. 893. 615. 24.2 760. 312. 472. 833. 127. 511.
#> 10 22.1 315. 154. 749. 757. 840. 577. 960. 374. 652. 914. 301.
#> 11 886. 677. 513. 444. 723. 286. 821. 159. 203. 850. 547. 781.
#> 12 358. 915. 819. 722. 768. 308. 155. 527. 326. 270. 856. 174.
#> 13 929. 275. 758. 932. 560. 272. 607. 433. 221. 239. 208. 762.
#> 14 261. 456. 388. 796. 305. 583. 437. 141. 190. 874. 504. 384.
#> 15 184. 347. 944. 118. 121. 828. 479. 186. 353. 203. 444. 795.
#> 16 265. 698. 624. 977. 255. 937. 54.5 706. 589. 984. 427. 560.
#> 17 122. 688. 147. 333. 448. 206. 884. 374. 890. 73.9 267. 547.
#> 18 631. 478. 238. 502. 130. 623. 834. 271. 762. 827. 392. 268.
#> 19 58.2 400. 776. 434. 356. 741. 706. 776. 315. 428. 326. 309.
#> 20 793. 566. 753. 765. 449. 959. 745. 467. 752. 651. 359. 638.
由v0.3.0于2020-07-03创建,请正确设置您的问题格式,解释您想要做什么,并与预期输出一起分享一个适当的可重复工作示例
value_vector1 <- n * (n + 2) * (value_squard / (n - 1:20))
vector_j <- values_tb[,j]
value_squard <- vector_j
value_squard <- values_tb[,j]
vector_j <- values_tb[,j]
value_squard <- vector_j
for (k in 1:20) {
Q <- n*(n+2)*(value_squard[k]/(n-k))
value_vector1 <- append(value_vector1, Q)
}
value_vector1 <- n * (n + 2) * (values_tb[,j] / (n - 1:20))
new_mat <- apply(values_tb, 1, function(x) n * (n + 2) * (x/(n - seq_along(x))))
values_tbl1 <- as_tibble(`colnames<-`(t(new_mat), paste0("Q_k", 1:12)))
values_tbl1
#> # A tibble: 20 x 12
#> Q_k1 Q_k2 Q_k3 Q_k4 Q_k5 Q_k6 Q_k7 Q_k8 Q_k9 Q_k10 Q_k11 Q_k12
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 533. 435. 999. 546. 688. 792. 551. 272. 435. 196. 1000. 573.
#> 2 771. 170. 312. 102. 472. 43.3 604. 725. 984. 541. 580. 746.
#> 3 648. 640. 484. 25.2 607. 675. 74.7 296. 10.1 309. 954. 255.
#> 4 868. 324. 666. 593. 749. 519. 442. 735. 186. 131. 857. 146.
#> 5 370. 147. 219. 14.1 990. 640. 954. 378. 609. 965. 815. 897.
#> 6 872. 233. 18.1 873. 607. 715. 72.7 490. 411. 588. 106. 413.
#> 7 172. 664. 97.5 412. 729. 422. 599. 406. 302. 339. 799. 789.
#> 8 790. 635. 255. 472. 823. 947. 89.8 993. 839. 684. 564. 427.
#> 9 175. 95.4 409. 893. 615. 24.2 760. 312. 472. 833. 127. 511.
#> 10 22.1 315. 154. 749. 757. 840. 577. 960. 374. 652. 914. 301.
#> 11 886. 677. 513. 444. 723. 286. 821. 159. 203. 850. 547. 781.
#> 12 358. 915. 819. 722. 768. 308. 155. 527. 326. 270. 856. 174.
#> 13 929. 275. 758. 932. 560. 272. 607. 433. 221. 239. 208. 762.
#> 14 261. 456. 388. 796. 305. 583. 437. 141. 190. 874. 504. 384.
#> 15 184. 347. 944. 118. 121. 828. 479. 186. 353. 203. 444. 795.
#> 16 265. 698. 624. 977. 255. 937. 54.5 706. 589. 984. 427. 560.
#> 17 122. 688. 147. 333. 448. 206. 884. 374. 890. 73.9 267. 547.
#> 18 631. 478. 238. 502. 130. 623. 834. 271. 762. 827. 392. 268.
#> 19 58.2 400. 776. 434. 356. 741. 706. 776. 315. 428. 326. 309.
#> 20 793. 566. 753. 765. 449. 959. 745. 467. 752. 651. 359. 638.