Hm, nice catch! In this special case, the value returned is from this code: 

jval = eval(jsub, SDenv, parent.frame())

Since `jsub = .SD`, this evaluates to .SD ('s value). However, since `jval` 
remains untouched, a copy is not made (I think). This can be seen with a 
`tracemem` statement:

x <- as.data.table(BOD)
xx <- x[, {print(tracemem(.SD)); .SD}, .SDcols="Time"]
[1] "<0x7fa4e9a518f0>"
tracemem(xx)
[1] "<0x7fa4e9a518f0>"


Basically `xx` is `.SD` and therefore is 'locked'. I guess a fix would be to 
check this and make a copy on return. Not sure.

Arun


On Monday, November 18, 2013 at 12:11 AM, Michael Nelson wrote:

> I don't believe this is to be expected.
> 
> A bug report should be filed (it is present in 1.8.10 on CRAN as well)
> 
> .SD is locked so you can't "mess" with it within a call to `[.data.table`, 
> but this "locked" status should not be retained following the completion of 
> that call
> 
> 
> ________________________________________
> From: [email protected] 
> (mailto:[email protected]) 
> [[email protected] 
> (mailto:[email protected])] on behalf of G 
> See [[email protected] (mailto:[email protected])]
> Sent: Monday, 18 November 2013 9:32 AM
> To: [email protected] 
> (mailto:[email protected])
> Subject: [datatable-help] .SD is locked
> 
> Hi,
> 
> Is the following error expected?
> 
> > library(data.table)
> data.table 1.8.11 For help type: help("data.table")
> > x <- as.data.table(BOD)
> > xx <- x[, .SD, .SDcols="Time"]
> > xx[, Time:=as.numeric(Time)]
> > 
> 
> Error in `[.data.table`(xx, , `:=`(Time, as.numeric(Time))) :
> .SD is locked. Using := in .SD's j is reserved for possible future
> use; a tortuously flexible way to modify by group. Use := in j
> directly to modify by group by reference.
> > sessionInfo()
> 
> R version 3.0.2 (2013-09-25)
> Platform: x86_64-pc-linux-gnu (64-bit)
> 
> locale:
> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
> [9] LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
> 
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
> 
> other attached packages:
> [1] data.table_1.8.11
> 
> loaded via a namespace (and not attached):
> [1] plyr_1.8 reshape2_1.2.2 stringr_0.6.2
> 
> 
> Thanks,
> Garrett
> _______________________________________________
> datatable-help mailing list
> [email protected] 
> (mailto:[email protected])
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
> _______________________________________________
> datatable-help mailing list
> [email protected] 
> (mailto:[email protected])
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
> 
> 


_______________________________________________
datatable-help mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help

Reply via email to