Group by variable not correctly provided to environment in j expression

Open
#5,590 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
r
Domain
data

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

scoping

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Rdatatable/data.table

All issues in Rdatatable/data.table

Similar issues

More R issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.