[Rd] Quiz: How to get a "named column" from a data frame
Christian Brechbühler
brechbuehler at gmail.com
Sat Aug 18 20:13:20 CEST 2012
On 8/18/12, Martin Maechler <maechler at stat.math.ethz.ch> wrote:
> On Sat, Aug 18, 2012 at 5:14 PM, Christian Brechbühler .... wrote:
>> On Sat, Aug 18, 2012 at 11:03 AM, Martin Maechler
>> <maechler at stat.math.ethz.ch> wrote:
>>> Consider this toy example, where the dataframe already has only
>>> one column :
>>>
>>> > nv <- c(a=1, d=17, e=101); nv
>>> a d e
>>> 1 17 101
>>>
>>> > df <- as.data.frame(cbind(VAR = nv)); df
>>> VAR
>>> a 1
>>> d 17
>>> e 101
>>>
>>> Now how, can I get 'nv' back from 'df' ? I.e., how to get
>>>
>>> > identical(nv, .......)
>>> [1] TRUE
>>>
>>> where ...... only uses 'df' (and no non-standard R packages)?
>>
>>
>>> identical(nv, df[,1])
>> [1] TRUE
> But it is not a solution in a current version of R!
> though it's still interesting that df[,1] worked in some incantation of
> R.
My mistake! We disliked some quirks of indexing, so we've long had
our own patch for "[.data.frame" in place, which I used inadvertently.
In essence, it does this:
result <- base::"[.data.frame"(df,,1, drop=F)
if (drop && length(ncol(result) > 0) && ncol(result)==1) {
save.names <- dimnames(result)[[1]]
result <- result[[1]]
names(result) <- save.names
}
That obviously violated your constraint "no non-standard R packages".
I apologize.
Still, maybe the behavior of getting the named column would be
desirable in general?
/Christian
More information about the R-devel
mailing list