On Tue, Mar 2, 2010 at 7:09 PM, Rob Forler <rfor...@uchicago.edu> wrote: > Hi everyone, > > I have the following code that works in data frames taht I would like tow > ork in data.tables . However, I'm not really sure how to go about it. > > I basically have the following > > names = c("data1", "data2") > frame = data.frame(list(key1=as.integer(c(1,2,3,4,5,6)), > key2=as.integer(c(1,2,3,2,5,6)),data1 = c(3,3,2,3,5,2), data2= > c(3,3,2,3,5,2))) > > for(i in 1:length(names)){ > frame[, paste(names[i], "flag")] = frame[,names[i]] < 3 > > } > > Now I try with data.table code: > names = c("data1", "data2") > frame = data.table(list(key1=as.integer(c(1,2,3,4,5,6)), > key2=as.integer(c(1,2,3,2,5,6)),data1 = c(3,3,2,3,5,2), data2= > c(3,3,2,3,5,2))) > > for(i in 1:length(names)){ > frame[, paste(names[i], "flag"), with=F] = as.matrix(frame[,names[i], > with=F] )< 3 > > }
Rob, this type of question is better for the package maintainer(s) directly rather than R-help. That said, one answer is to use list addressing: for(i in 1:length(names)){ frame[[paste(names[i], "flag")]] = frame[[names[i]]] < 3 } Another option is to manipulate frame as a data frame and convert to data.table when you need that functionality (conversion is quick). In the data table version, frame[,names[i], with=F] is the same as frame[,names[i], drop=FALSE] (the answer is a list, not a vector). Normally, it's easier to use [[]] or $ indexing to get this. Also, fname[i,j] <- something assignment is still a bit buggy for data.tables. - Tom Tom Short ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.