如何快速将列表的元素添加到R中的列表?

时间:2019-03-07 01:45:39

标签: r optimization

这是我的代码的片段:

m <- as.data.frame.matrix(matrix(c(20, 32, 52, 84, 98, 101), ncol = 2, nrow = 3))
ages <- as.numeric()
for(i in 1:nrow(m)){
  ages <- c(ages, c(m$V1[i]:m$V2[i]))
}

基本上,第一列是开始年龄,第二列是结束年龄。我正在尝试将每个人从头到尾的每个年龄都添加到列表中。不幸的是,这非常慢,因为我有大约一百万个观测值,并且我正在寻找一种优化方法。

2 个答案:

答案 0 :(得分:2)

我们可以使用mapply并在两列之间创建顺序

unlist(mapply(`:`, m$V1, m$V2))

#[1]    20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37..
#[29]   48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65..
#[57]   76  77  78  79  80  81  82  83  84  32  33  34  35  36  37  38  39  40..
#[85]   51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68..
#[113]  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96..
#[141]  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77 ..
#[169]  88  89  90  91  92  93  94  95  96  97  98  99 100 101

答案 1 :(得分:1)

这里是使用pmap

的选项
library(purrr)
library(dplyr)
set_names(m, c('from', 'to')) %>%
     pmap(., seq) %>% 
     unlist

或使用Map中的base R

unlist(do.call(Map, c(f = `:`, m)))