Let DT[-integer(0)] return the full table
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start at the [.data.table entry point referenced by the warning and reproduce the supplied DT[-w] examples with w = integer(0) and an out-of-range negative index. Done means DT[-integer(0)] returns the full table while the existing warning and other negative-indexing behavior remain appropriate.
Written by the indexing model from the issue text.
Description
One annoying quirk of base R is the fact that x[-w] excludes the positions in w iff length(w) > 0. This happens because -w is computed before being passed to [. Since data.table evaluates the whole DT[...] call together, it can break consistency here, and I think should do so.
library(data.table)
DT = data.table(id = 1:2)
w = integer(0)
# current behavior
DT[-w]
# Empty data.table (0 rows) of 1 col: id
# desired behavior
DT[-w]
# id
# 1: 1
# 2: 2
The workaround mentioned in the link above is to set w = nrow(DT) + 1L. This works with vectors, x = 1:2; x[-3L], but data.table gives a helpful warning for this hack.
w2 = 3L
DT[-w2]
# id
# 1: 1
# 2: 2
# Warning message:
# In `[.data.table`(DT, -w2) :
# Item 1 of i is -3 but there are only 2 rows. Ignoring this and 0 more like it out of 1.
I doubt this would break backward compatibility in a way that matters for folks; and I guess it can be done without much of any efficiency tradeoff (?).
Example of the negative consequences of current behavior from SO: http://stackoverflow.com/a/43682893/
- Dominant language
- R
- Stars
- 3.9k
- Forks
- 1.1k
- Avg merge
- 14h 4m
- Merged PRs (30d)
- 4
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Rdatatable/data.table
-
as.data.table() recurses without end on a survival::Surv object (or any data.frame carrying one) Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Rdatatable/data.table#7887 ·
-
consistency tests
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Rdatatable/data.table#7853 · 3 comments ·
-
internals
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Rdatatable/data.table#6938 · 1 comment ·
-
encoding fread
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Rdatatable/data.table#5179 · 8 comments ·
-
documentation programming
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Rdatatable/data.table#3199 · 3 comments ·
All issues in Rdatatable/data.table
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
r-lib/pkgdepends#485 · 3 comments ·
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
beginners blocker
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enviPathR OpenBuild Error Build OK Build Warning policies-accepted pre-review precheck-passed
Difficulty 1/5 Under an hour Newbie friendliness 84/100
Bioconductor/BiocContributions#207 · 6 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
datacarpentry/semester-biology#1255 ·