[R] How can I improve an ugly, dumb hack
David Winsemius
dwinsemius at comcast.net
Thu Sep 6 20:06:20 CEST 2012
On Sep 6, 2012, at 10:28 AM, Bert Gunter wrote:
> On Thu, Sep 6, 2012 at 10:20 AM, David Winsemius <dwinsemius at comcast.net> wrote:
> <snipped>
>
>> I guess this means you are not the one performing the d$c <- m step? If you were under control of that step, you can get different (and more to your liking) behavior with 'cbind.data.frame':
>
> Correct. d is given to me already, as described. I constructed it in
> my post only to provide an example of what it might look like. I
> apologize for evidently being unclear about this (and I tried real
> hard ... sigh....).
>
OK, then:
> cbind(d[, !sapply(d, is.matrix)], d[, sapply(d, is.matrix)])
a b x y
1 1 4 a d
2 2 5 b e
3 3 6 c f
HTH;
--
DW
> '
> -- Bert
>
>
>>
>>> cbind(d, m)
>> a b x y
>> 1 1 4 a d
>> 2 2 5 b e
>> 3 3 6 c f
>>> ncol( cbind(d, m) )
>> [1] 4
>>
>>
>>>
>>> Now what I wish to do is programmatically convert d to a 4 column
>>> frame with names c("a","b","x","y"). Of course:
>>>
>>> 1. The column classes/modes must be preserved (character going to
>>> factor and numeric remaining numeric).
>>>
>>> 2. I assume that I do not know a priori which of d's
>>> components/columns are matrices and which are vectors.
>>>
>>> 3. There may be many more columns which are vectors or matrix than
>>> just the three in this little example.
>>>
>>> I can easily and sensibly accomplish these 3 tasks, but the problem is
>>> that I run afoul of data frame column naming procedures in doing so,
>>> about which the data.frame Help page says rather enigmatically:
>>>
>>> "How the names of the data frame are created is complex, and the rest
>>> of this paragraph is only the basic story." Indeed!
>>> (This, of course, is shorthand for "Go look at the source if you want
>>> to know!" )
>>>
>>> Anyway, AFAICT from the Help, any "simple" approach to conversion
>>> using data.frame results in "c.x" and "c.y" for the names of the last
>>> two columns. I **can** get what I want by explicitly constructing the
>>> vector of names via the following ugly hack; my question is, can it be
>>> improved?
>>>
>>>> dd <- do.call(data.frame,d)
>>>
>>>> dd
>>> a b c.x c.y
>>> 1 1 4 a d
>>> 2 2 5 b e
>>> 3 3 6 c f
>>>
>>>> ncol(dd)
>>> [1] 4
>>>
>>>> cnames <- sapply(d,colnames)
>>>> cnames
>>> $a
>>> NULL
>>>
>>> $b
>>> NULL
>>>
>>> $c
>>> [1] "x" "y"
>>>
>>>
>>>> names(dd) <- unlist(ifelse(sapply(cnames,is.null),names(d),cnames))
>>> ##Yuck!
>>>
>>>> dd
>>> a b x y
>>> 1 1 4 a d
>>> 2 2 5 b e
>>> 3 3 6 c f
>>>
>>> Cheers to all,
>>> Bert
>>>
>>>
>>> --
>>>
>>> Bert Gunter
>>> Genentech Nonclinical Biostatistics
>>>
>>> Internal Contact Info:
>>> Phone: 467-7374
>>> Website:
>>> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> 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.
>>
>> David Winsemius, MD
>> Alameda, CA, USA
>>
>
>
>
> --
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
David Winsemius, MD
Alameda, CA, USA
More information about the R-help
mailing list