r - Using lapply with Dates and the minus function -


i have vector of dates , vector of number-of-days.

dates <- seq(sys.date(), sys.date()+10, by='day') number.of.days <- 1:4 

i need list entry each number-of-days, each entry in list dates vector minus corresponding number-of-days, ie.,

list(dates-1, dates-2, dates-3, dates-4) 

the defintion of - (function (e1, e2) .primitive("-")) indicates first , second arguments e1 , e2, respectively. following should work.

lapply(number.of.days, `-`, e1=dates) 

but raises error.

error in -.date(x[[i]], ...) : can subtract "date" objects

furthermore, following does work:

lapply(number.of.days, function(e1, e2) e1 - e2, e1=dates) 

is feature or bug?

you can use:

lapply(number.of.days, `-.date`, e1=dates) 

part of problem - primitive doesn't argument matching. notice how these same:

> `-`(e1=5, e2=3) [1] 2 > `-`(e2=5, e1=3) [1] 2 

from r language definition:

this subsection applies closures not primitive functions. latter typically ignore tags , positional matching, pages should consulted exceptions, include log, round, signif, rep , seq.int.

so in case, end using dates second argument - though attempt specify first. using "date" method -, not primitive, can work.

so technically, behavior seeing feature, or perhaps "documented inconsistency". part possibly considered bug r multiple dispatch "date" method - despite method not supporting non-date arguments first argument:

> 1:4 - dates  # dispatches `-.date` despite first argument not being date error in `-.date`(1:4, dates) : can subtract "date" objects 

Comments

Popular posts from this blog

javascript - oscilloscope of speaker input stops rendering after a few seconds -

javascript - gulp-nodemon - nodejs restart after file change - Error: listen EADDRINUSE events.js:85 -

Fatal Python error: Py_Initialize: unable to load the file system codec. ImportError: No module named 'encodings' -