从R中的列表中提取第一、第二、第三…个子元素并存储为列表



我有下面的列表,它由12个元素组成,每个元素都是一个长度为15的向量。

set.seed(100)
list_data <- replicate(12, sample.int(1000,15),simplify = F)

我想提取第一个,第二个。。。,子列表的第15个元素如下:

sapply(list_data, '[[',1)
sapply(list_data, '[[',2)
...
sapply(list_data, '[[',15)

并将它们存储在一个列表中:

list(sapply(list_data, '[[',1), sapply(list_data, '[[',2),sapply(list_data, '[[',3),
sapply(list_data, '[[',4), ...,sapply(list_data, '[[',15))

因此,最终应该有一个长度为15的列表,每个元素都包含一个长度12的向量。我想知道我是否可以在循环不使用的情况下执行,并且可能使用lapplysapply的组合?

lapply(1:15, function(i) sapply(list_data, '[', i))
library(data.table)
transpose(list_data)

中的结果

[[1]]
[1] 714 183 948 158 920 883 952 298 314 147 694 895
[[2]]
[1] 503 299 560 733 171 923 406 844 538 863 170 316
[[3]]
[1] 358 504 288  87 519 430 978 421 233 663 387 813
[[4]]
[1] 624 466 341 607 703 955 949 666  48 844 742 364
[[5]]
[1] 985 957 347 865 449 942 643 490 255 794 336 805
[[6]]
[1] 718 908 167 223 393 254 133 871 848 261 730 490
[[7]]
[1] 919 307 377 925 660 965 556 792 118 759 422 964
[[8]]
[1] 470 456 784 732 910  47 853 396  37 334 728 100
[[9]]
[1] 966 146 971 251 363 439 156 137 222 296 427 201
[[10]]
[1] 516 793 628 543 846 943 948 250 731 879 723 922
[[11]]
[1] 823 258 450 694 600 708 757 363 658 849 900 283
[[12]]
[1] 838 435 966 425 387  12 281 567 328 997 714 927
[[13]]
[1]  98 324 605 489 878 947 554 843  91 222 494 942
[[14]]
[1] 903  68 301 297 420 121 655 703 584 448 818  71
[[15]]
[1]   7 510 670 502 371  16 185 291 194 223 780 661

如果您喜欢使用tidyverse函数,可以使用

library(purrr)
list_data %>% transpose() %>% simplify_all()

相关内容

  • 没有找到相关文章

最新更新