It's because in this instance R (and S before it) behaves a bit like Microsoft 
and tries to guess what you really wanted rather than listen to what you asked 
for.

If you ask for a single column from a data frame, e.g.

df[,1]

then by default this behaves like df[[1]] and you get a single component, no 
longer a part of the data frame.  If you want to ensure you always get a data 
frame, you need to say so with

df[,j, drop = FALSE]

If you select a single row from a data frame in general you get a data frame.  
The exceptin is when the data frame itself only has one column and the dropping 
convention swings into action once more.  The way to avoid this is the same, 
i.e.

df[j,,drop = FALSE]

In general if you want to ensure consistent behaviour in scripts, it is a 
recommended that you use "drop = FALSE" as a kind of pseudo-index in the last 
position like this.  You can always demote the object to a simpler form, if 
that's what you really want and if one exists, using the drop() function later.

Why is it so?  It was not my idea.  I do know, though, that the Matrix package 
allows matrix operations with this convention inoperative.  Other people must 
have become a tad frustrated with it before now.

Bill Venables. 

-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
Behalf Of James Hirschorn
Sent: Monday, 15 November 2010 10:32 AM
To: R-help@r-project.org
Subject: [R] Extracting from data.frame

Can someone please explain the following behavior?

 

df1 and df2 are data.frames. Suppose I want a subset of the rows
(observations) using extraction, say just the first row. What I want to know
is why if df1 has just one column then df1[1,] returns a vector, whereas if
df2 has 2 or more columns then df2[1,] returns a data frame? Why is the
single column case different?


        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to