Re: [R] idiom for constructing data frame

2015-04-03 Thread peter dalgaard
On 31 Mar 2015, at 20:55 , William Dunlap wdun...@tibco.com wrote: You can use structure() to attach the names to a list that is input to data.frame. E.g., dfNames - c(First, Second Name) data.frame(lapply(structure(dfNames, names=dfNames), function(name)rep(NA_real_, 5))) Yes, I

Re: [R] idiom for constructing data frame

2015-04-03 Thread William Dunlap
but wouldn't it be more to the point to do df - as.data.frame(rep(list(rep(NA_real_, 10)),3)) names(df) - names As a matter of personal style (and functional programming sensibility), I prefer not to make named objects and then modify them. Also, the names coming out of that as.data.frame

Re: [R] idiom for constructing data frame

2015-04-03 Thread Hadley Wickham
On Tue, Mar 31, 2015 at 6:42 PM, Sarah Goslee sarah.gos...@gmail.com wrote: On Tue, Mar 31, 2015 at 6:35 PM, Richard M. Heiberger r...@temple.edu wrote: I got rid of the extra column. data.frame(r=seq(8), foo=NA, bar=NA, row.names=r) Brilliant! After much fussing, including a disturbing

Re: [R] idiom for constructing data frame

2015-04-03 Thread peter dalgaard
On 03 Apr 2015, at 16:46 , William Dunlap wdun...@tibco.com wrote: df - as.data.frame(rep(list(rep(NA_real_, 10)),3)) names(df) - names As a matter of personal style (and functional programming sensibility), I prefer not to make named objects and then modify them. Also, the names

Re: [R] idiom for constructing data frame

2015-03-31 Thread Ista Zahn
You can make it as elegant as you want, e.g., make.empty.df - function(nrow,ncol, names) { if(length(names) %% ncol != 0) stop(Lenght of names is not a multiple of the number of colums) data.frame(matrix(NA, nrow, ncol, dimnames = list(NULL, names))) } Best, Ista On Tue, Mar 31, 2015

Re: [R] idiom for constructing data frame

2015-03-31 Thread William Dunlap
You can use structure() to attach the names to a list that is input to data.frame. E.g., dfNames - c(First, Second Name) data.frame(lapply(structure(dfNames, names=dfNames), function(name)rep(NA_real_, 5))) Bill Dunlap TIBCO Software wdunlap tibco.com On Tue, Mar 31, 2015 at 11:37 AM, Sarah

Re: [R] idiom for constructing data frame

2015-03-31 Thread Sarah Goslee
Hi, Duncan Murdoch suggested: The matrix() function has a dimnames argument, so you could do this: names - c(strat, id, pid) data.frame(matrix(NA, nrow=10, ncol=3, dimnames=list(NULL, names))) That's a definite improvement, thanks. But no way to skip matrix()? It just seems unRlike,

Re: [R] idiom for constructing data frame

2015-03-31 Thread Sarah Goslee
I just snagged this from Duncan Murdoch's reply to the same question: # Create an empty dataframe to hold the results df - data.frame(strat=NA, id=NA, pid=NA)[rep(1, length(sel)),] This skips matrix(), but how to set the column names programmatically within a function? Sarah, still sure I'm

[R] idiom for constructing data frame

2015-03-31 Thread Sarah Goslee
Hi folks, I KNOW there has to be a way to do this more elegantly, but I consistently fail to come up with it, as I was just reminded while writing an example for a query on this list. What's a nifty way to construct a data frame of a given size? The only way I know of it to use matrix(), eg

Re: [R] idiom for constructing data frame

2015-03-31 Thread Duncan Murdoch
On 31/03/2015 1:52 PM, Sarah Goslee wrote: I just snagged this from Duncan Murdoch's reply to the same question: # Create an empty dataframe to hold the results df - data.frame(strat=NA, id=NA, pid=NA)[rep(1, length(sel)),] This skips matrix(), but how to set the column names programmatically

Re: [R] idiom for constructing data frame

2015-03-31 Thread Sarah Goslee
On Tue, Mar 31, 2015 at 6:35 PM, Richard M. Heiberger r...@temple.edu wrote: I got rid of the extra column. data.frame(r=seq(8), foo=NA, bar=NA, row.names=r) Brilliant! After much fussing, including a disturbing detour into nested lapply statements from which I barely emerged with my sanity

Re: [R] idiom for constructing data frame

2015-03-31 Thread Sven E. Templer
If you don't mind an extra column, you could use something similar to: data.frame(r=seq(8),foo=NA,bar=NA) If you do, here is another approach (see function body): empty.frame - function (r = 1, n = 1, fill = NA_real_) { data.frame(setNames(lapply(rep(fill, length(n)), rep, times=r), n)) }

Re: [R] idiom for constructing data frame

2015-03-31 Thread Richard M. Heiberger
I got rid of the extra column. data.frame(r=seq(8), foo=NA, bar=NA, row.names=r) Rich On Tue, Mar 31, 2015 at 6:18 PM, Sven E. Templer sven.temp...@gmail.com wrote: If you don't mind an extra column, you could use something similar to: data.frame(r=seq(8),foo=NA,bar=NA) If you do, here is

Re: [R] idiom for constructing data frame

2015-03-31 Thread Henrik Bengtsson
I've got dataFrame() in R.utils for this purpose, e.g. df - dataFrame(colClasses=c(a=integer, b=double, c=character), nrow=10L) str(df) 'data.frame': 10 obs. of 3 variables: $ a: int 0 0 0 0 0 0 0 0 0 0 $ b: num 0 0 0 0 0 0 0 0 0 0 $ c: chr ... Related: You can use the