Reputation: 1862
I was wondering how joining of two data.tables based on column conditions works! So which column is used, inner or/before outer?
require(data.table)
outer <- data.table(KeyColumn=letters, value_outer=seq_along(letters))
inner <- data.table(KeyColumn=letters[4:6], value_inner=c(100,101,102))
setkey(outer, KeyColumn)
setkey(inner, KeyColumn)
outer[inner] # works as expected
inner[value_outer<10] # error as expected, because column doesn't exist in inner
outer[inner[value_outer<10], NewColumn := value_inner] # why does this work?
If the conditional column is present (names identical) in both data.tables, but values differ, which column is used, inner or/before outer?
Upvotes: 4
Views: 142
Reputation: 1862
Thanks to @eddi who answered in a comment:
inner
looks at its columns, doesn't find value_outer
, so looks at its parent environment, which is outer
, thus that value_outer
is same as outer$value_outer
Upvotes: 1