[R] idiom for constructing data frame

peter dalgaard pdalgd at gmail.com
Fri Apr 3 14:51:58 CEST 2015


> On 31 Mar 2015, at 20:55 , William Dunlap <wdunlap at 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 cooked up something similar:

names <- c("foo","bar","baz")
names(names) <- names # confuse 'em....
as.data.frame(lapply(names, function(x) rep(NA_real_,10)))

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

?

The lapply() approach could be generalized to a vector of column classes, though. 

A general solution looks impracticable; once you start considering how to specify factor columns with each their own level set, things get a bit out of hand. 

-pd

> 
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
> 
> On Tue, Mar 31, 2015 at 11:37 AM, Sarah Goslee <sarah.goslee at gmail.com>
> wrote:
> 
>> 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, although since it's only full of NA values there
>> are no coercion issues with column types or anything, so it doesn't
>> hurt. It's just inelegant. :)
>> 
>> Sarah
>> --
>> Sarah Goslee
>> http://www.functionaldiversity.org
>> 
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list