If you are prepared to give up most of the sanity checks, see this at the bottom of read.table:
## this is extremely underhanded ## we should use the constructor function ... ## don't try this at home kids class(data) <- "data.frame" row.names(data) <- row.names data So create a (named?) list with your vectors in it, assign class "data.frame" and then row.names(data) <- NULL On Thu, 30 Nov 2006, Gavin Simpson wrote: > Hi, > > In a function, I compute 10 (un-named) vectors of reasonable length > (4471 in the particular example I have to hand) that I want to combine > into a data frame object, that the function will return. > > This is very slow, so *I'm* doing something wrong if I want it to be > quick and efficient, though I'm not sure what the best way to do this > would be. > > I know it is the combining into data frame bit that is slow, because > I've Rprof'ed it: > > $by.self > self.time self.pct total.time total.pct > "names<-.default" 16.58 52.8 16.58 52.8 > "unlist" 7.22 23.0 7.26 23.1 > "data.frame" 1.72 5.5 29.38 93.6 > "duplicated.default" 1.66 5.3 1.66 5.3 > "+" 1.20 3.8 1.20 3.8 > "list" 0.40 1.3 0.40 1.3 > "as.data.frame.numeric" 0.28 0.9 3.32 10.6 > "apply" 0.26 0.8 1.70 5.4 > "pmatch" 0.22 0.7 0.22 0.7 > "paste" 0.20 0.6 0.90 2.9 > "deparse" 0.14 0.4 0.70 2.2 > "eval" 0.12 0.4 31.28 99.7 > "names<-" 0.12 0.4 16.70 53.2 > "FUN" 0.12 0.4 1.32 4.2 > "names" 0.12 0.4 0.14 0.4 > "as.list.default" 0.12 0.4 0.12 0.4 > "duplicated" 0.10 0.3 1.76 5.6 > "gc" 0.10 0.3 0.10 0.3 > > And I stepped through it under debug() and all the calculations before > are quick, and then this bit takes a little over 20 seconds to complete > > fab <- data.frame(lc.ratio = lc.ratio, Q = Q, > fNupt = fNupt, > rho.n = rho.n, rho.s = rho.s, > net.Nimm = net.Nimm, > net.Nden = net.Nden, > CLminN = CLminN, > CLmaxN = CLmaxN, > CLmaxS = CLmaxS) > > I can get it down to c. 5 seconds if I do (not Rprof'ed): > > fab <- data.frame(lc.ratio, Q, > fNupt, > rho.n, rho.s, > net.Nimm, > net.Nden, > CLminN, > CLmaxN, > CLmaxS) > > But this still seems quite a long time, so I'm thinking that there must > be a quicker of doing what I want (end up with a data.frame with the 10 > vectors in it). > > Can anyone enlighten me? > >> version > _ > platform i686-pc-linux-gnu > arch i686 > os linux-gnu > system i686, linux-gnu > status Patched > major 2 > minor 4.0 > year 2006 > month 10 > day 03 > svn rev 39576 > language R > version.string R version 2.4.0 Patched (2006-10-03 r39576) > >> sessionInfo() > R version 2.4.0 Patched (2006-10-03 r39576) > i686-pc-linux-gnu > > locale: > LC_CTYPE=en_GB.UTF-8;LC_NUMERIC=C;LC_TIME=en_GB.UTF-8;LC_COLLATE=en_GB.UTF-8;LC_MONETARY=en_GB.UTF-8;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=en_GB.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_GB.UTF-8;LC_IDENTIFICATION=C > > attached base packages: > [1] "methods" "stats" "graphics" "grDevices" "utils" > "datasets" > [7] "base" > > Thanks in advance, > > G > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-help@stat.math.ethz.ch 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.