Hi Frank,

The data.frame way of referring to column names or numbers requires with=FALSE. 
This is because the default data.table-like operations are more common where 
with=TRUE. Also, data.tables are designed with really huge data sets in mind 
and avoiding as many copies as possible. So, unless there’s a strong reason, 
the data.table philosophy would be to avoid copies (ex: DT[, 1, with=FALSE] 
will create a copy).

That being said, another alternative is to subset the data.table way (where 
with=TRUE by default):

DT2 = DT[, list(A,D,B)] # list(1,4,2) won't work. Read FAQ 1.1-1.5
setnames(DT2, c("a", "d", "B"))
It’s also generally considered a bad practice to subset columns by using column 
numbers - prone to errors.

Hope this helps.


Arun

From: Frank S. [email protected]
Reply: Frank S. [email protected]
Date: July 21, 2014 at 4:48:54 PM
To: Chris Neff [email protected], [email protected] 
[email protected]
Subject:  Re: [datatable-help] Construct a new data table from another  

Thanks Chris,

 

But, is there any option in order to avoid writing "with=FALSE" every time

in the next situation?:

 

 

# USING DATA FRAME 
set.seed(100)
DF = data.frame(A=letters[1:5],B=rnorm(5),C=rexp(5),D=runif(5))
DF2 <- data.frame(a=DF[,1],d=DF[,4],B=DF[,2])

If I do the equivalent operations under data table format, I'm onñy able to 
obtain
the same result with the following code:
 
# USING DATA TABLE
set.seed(100)
DT = data.table(A=letters[1:5],B=rnorm(5),C=rexp(5),D=runif(5))
DT2 <- data.table(DT[,1,with=FALSE], DT[,4,with=FALSE], DT[,2,with=FALSE])

setnames(DT2, c('a','d','B'))

 

Thank you!

_______________________________________________  
datatable-help mailing list  
[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