[R] idiom for constructing data frame

Duncan Murdoch murdoch.duncan at gmail.com
Tue Mar 31 20:03:02 CEST 2015


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 obvious

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

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



More information about the R-help mailing list