I've come across something a bit wierd, especially because the code may give different outputs each time it's run. In a nutshell I was incorrectly using set
to set a value in a row bigger than the last one but instead of doing nothing set
created a negative length data.table
.
library(data.table)
dt<-data.table(id=1:5, var=rnorm(5)) # normal example
set(dt, 6L, 1L, 3L) # doesn't set anything as expected.
dt
#
# now my real data, after I found the error in my code (incorrect row number in set)
#
dt1 <- data.table(ID = "29502509", FY = 2012, VAR = 61067.5442975645,
startDate = structure(15062L, class = c("IDate", "Date")),
endDate = structure(15429L, class = c("IDate", "Date")),
start = "1750", end = "2404",
date = structure(15461L,class = c("IDate", "Date")),
DESCR = "JOB", NOTE = "NEW")
set(dt1, 12L, 3L, 62385.6516144086)
str(dt1)
Classes ‘data.table’ and 'data.frame': 1 obs. of 10 variables:
$ ID : chr "29502509"
$ FY : num 2012
$ VAR : num 61068
$ startDate: IDate, format: "2011-03-29"
$ endDate :
Error in do.call(str, c(list(object = obj), aList, list(...)), quote = TRUE) :
negative length vectors are not allowed
> sapply(dt1, length)
ID FY VAR startDate endDate start end date
1 1 1 1 -637110831 1 1 1
DESCR NOTE
1 1
> dput(dt1)
structure(list(ID = "29502509", FY = 2012, VAR = 61067.5442975645,
startDate = structure(15062L, class = c("IDate", "Date")),
endDate = structure(, class = c("IDate", "Date")), start = "1750", # HERE
end = "2404", date = structure(15461L, class = c("IDate",
"Date")), DESCR = "JOB", NOTE = "NEW"), .Names = c("ID",
"FY", "VAR", "startDate", "endDate", "start", "end", "date",
"DESCR", "NOTE"), row.names = c(NA, -1L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x0000000000130788>)
As I said above you may need to run some times the entire code to see that, from the creation of the data.table dt1 <- data.table(...
to set(dt1,...
, because I noticed that if it doesn't happen the first time it won't ever happen unless I re-run dt1 <- data.table(...
. Any idea?
EDIT:
To be specific, when I say different result I mean that sometimes it does nothing (as expected) but most of the times it creates a negative length column always the Date
, and sometimes it creates an entire data.table
with negative rows. Plus, in the last two cases (single column or entire data.table
) the negative length is always -637110831