Skip to content

Subsetting with Date produces error #4651

@renkun-ken

Description

@renkun-ken

It is known that using a numeric vector in i will be treated as subsetting by index. However, if the supplied numeric vector has some classes (e.g. Date), then it might make more sense not to subset by index but join (just like a character vector).

Consider the following example:

library(data.table)
test <- data.table(
  date = seq.Date(as.Date("2020-01-01"), as.Date("2020-07-01"), by = "day"),
  key = "date"
)
test[, x := rnorm(.N)]
test[as.Date("2020-01-02")]

The following error is produced:

> test[as.Date("2020-01-02")]                                                                   
Error in `[.data.table`(test, as.Date("2020-01-02")) : 
  i has evaluated to type double. Expecting logical, integer or double.
Backtrace:
1: stop("i has evaluated to type ", typeof(i), ". Expecting logical, integer or double.")
2: `[.data.table`(test, as.Date("2020-01-02"))
3: test[as.Date("2020-01-02")]

User might expect it to behave like

> test[.(as.Date("2020-01-02"))]                                                                
Key: <date>
         date          x
       <Date>      <num>
1: 2020-01-02 -0.2380267

Metadata

Metadata

Assignees

No one assigned

    Labels

    joinsUse label:"non-equi joins" for rolling, overlapping, and non-equi joins

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions