Re: [R] idiom for constructing data frame

2015-04-03 Thread peter dalgaard
> On 03 Apr 2015, at 16:46 , William Dunlap 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 comin

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.fram

Re: [R] idiom for constructing data frame

2015-04-03 Thread Hadley Wickham
On Tue, Mar 31, 2015 at 6:42 PM, Sarah Goslee wrote: > On Tue, Mar 31, 2015 at 6:35 PM, Richard M. Heiberger 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 >

Re: [R] idiom for constructing data frame

2015-04-03 Thread peter dalgaard
> On 31 Mar 2015, at 20:55 , William Dunlap 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 cooke

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

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 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 (arguable, I

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 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 another approach

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)) } emp

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, Sara

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 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 unRlik

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
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 mis

[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 data