[datatable-help] !J (not-join) just added - please check
Matthew Dowle
mdowle at mdowle.plus.com
Thu Oct 25 01:31:28 CEST 2012
Hi all,
New feature just added. I had planned to use '-' but realised '!' seems
much better. Running it past you all to double check. If you can see any
problems e.g. backwards compatibility issues, please shout. It doesn't
break any existing tests.
================
A new "!" prefix on i signals not-join (a.k.a. not-select), #1384.
DT[-DT["a", which=TRUE, nomatch=0]] # old not-join idiom, still works
DT[!"a"] # same result, now preferred.
DT[!J(6),...] # !J == not-join
DT[!2:3,...] # ! on all types of i
DT[colA!=6L | colB!=23L,...] # multiple vector scanning approach
DT[!J(6L,23L)] # same result, faster binary search
'!' has been used rather than '-' :
* to match the 'not-join' and 'not-select' nomenclature
* with '-', DT[-0] would return DT rather than DT[0] and not be backwards
compatibile. With '!', DT[!0] returns DT both before (since !0 is TRUE
in base R) and after this new feature.
* to leave DT[+...] and DT[-...] available for future use
================
Links to background in here :
https://r-forge.r-project.org/tracker/index.php?func=detail&aid=1384&group_id=240&atid=978
The new tests are, so far :
DT = data.table(A=rep(1:3,each=2),B=1:6,key="A")
test(788, DT[!J(2)], data.table(A=c(1L,1L,3L,3L),B=c(1L,2L,5L,6L),key="A"))
test(789, DT[!(2:6)], DT[1])
test(790, DT[!(2:6)], DT[!2:6])
test(791, DT[!6], DT[1:5])
test(792, DT[!c(TRUE,FALSE)], DT[c(FALSE,TRUE)])
test(793, setkey(DT[,A:=letters[A]],A)[!c("b","c")], DT["a"])
test(794, DT[!"b"], DT[c("a","c")])
test(795, DT[!0], DT)
test(796, DT[!NULL], DT[NULL])
test(797, DT[!integer()], DT)
test(798, DT[!-1], DT[1])
test(799, DT[--1], DT[1])
myi = c("a","c")
test(800, DT[!myi], DT["b"])
test(801, DT[!"c",sum(B),by=A], data.table(A=c("a","b"),V1=c(3L,7L),key="A"))
test(802, DT[!"missing",sum(B),by=A], DT[,sum(B),by=A])
test(803, DT[!c("a","missing","b","missing2"),sum(B),by=A], DT["c",sum(B)])
Matthew
More information about the datatable-help
mailing list