Group by variable not correctly provided to environment in j expression
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start by running the grouped := example from the issue and inspect how data.table evaluates j and group-by variables when creating environments. Compare each environment's x value with its original group value; done means the result is no longer uniformly taken from the final group and the reproduced behavior is covered by a regression test.
Written by the indexing model from the issue text.
Description
I'd like to create a column in a dataframe containing instances of R6 classes (environments). To construct those instances, I'm using := assignment grouped by some other primitive columns (e.g a date column or something). The constructor for my R6 class requires that the group-by variables be provided. However, when j evaluates, it seems to only end up taking the last value from the group-by columns rather than the value for each group. I'm not sure if this is a data.table bug vs some issue w.r.t lazy evaluation in R in general.
For example (using raw environments vs an R6 class):
df = data.table(original=1:10)
df[,`:=`(copied = list(as.environment(list(x=original)))), by=list(original)]
original copied
1: 1 <environment[1]>
2: 2 <environment[1]>
3: 3 <environment[1]>
4: 4 <environment[1]>
5: 5 <environment[1]>
6: 6 <environment[1]>
7: 7 <environment[1]>
8: 8 <environment[1]>
9: 9 <environment[1]>
10: 10 <environment[1]>
df$copied[[1]]$x
# Expecting x=1
[1] 10
df$copied[[2]]$x
# Expecting x=2
[1] 10
- 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 ·