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.frame(matrix(NA, nrow=10, ncol=3)) and then to set the colnames in a second step. This comes up a lot when pre-allocated a data frame before using a loop: I know the size and column names, but want an empty structure to fill later. Sarah -- Sarah Goslee http://www.functionaldiversity.org
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 missing something obvious On Tue, Mar 31, 2015 at 1:46 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:> 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.frame(matrix(NA, nrow=10, ncol=3)) > > and then to set the colnames in a second step. > > This comes up a lot when pre-allocated a data frame before using a > loop: I know the size and column names, but want an empty structure to > fill later. > > Sarah >-- Sarah Goslee http://www.functionaldiversity.org
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 > within a function? > > Sarah, still sure I'm missing something obviousThe 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))) Duncan Murdoch> > > On Tue, Mar 31, 2015 at 1:46 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote: > > 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.frame(matrix(NA, nrow=10, ncol=3)) > > > > and then to set the colnames in a second step. > > > > This comes up a lot when pre-allocated a data frame before using a > > loop: I know the size and column names, but want an empty structure to > > fill later. > > > > Sarah > > >