Search code examples
rdata.tablevectorizationseq

Using seq vectorwise


I would like to create a column with lists of all integers from a starting vector to an endvector in a datatable.

Is there a way to use seq vectorwise? Something like:

 library(data.table)
 Startpoints <- seq(1,11,5)
 Endpoints <- seq(5,15,5)
 DT <- data.table(Startpoints, Endpoints)
 DT[, sequences := seq(Startpoints, Endpoints, 1)]

which would idealy give me a column like that within DT (not considering list-wrap ups so far):

sequences
1 2 3 4 5
6  7  8  9 10
11 12 13 14 15

More generally asked: I suppose that there is no easy way to transform a function into a vectorized version of it? I still don't fully understand when a (vector)variable represents a single value from one row and when it stands for its complete vector when used as function-argument.


Solution

  • You could simply use Map:

    DT[,sequences := Map(":", Startpoints, Endpoints)]
    #   Startpoints Endpoints      sequences
    #1:           1         5      1,2,3,4,5
    #2:           6        10  6, 7, 8, 9,10
    #3:          11        15 11,12,13,14,15
    

    It comes in handy when you are trying to apply a function to corresponding elements of multiple vectors, or in your case columns.