On 04 Aug 2015, at 10:50 , Karl Schilling <karl.schill...@uni-bonn.de> wrote:

> Dear All,
> 
> I have an observation / question about how the function length() works once 
> package dplyr is loaded.
> 
> Say we have a data.frame  df with n rows and m columns. Then a way to get the 
> number of rows is to use
> 
> length(df$m1)  (m1 here stand is as the header of the first column)
> 
> or, alternatively
> 
> length(df[,1]).
> 
> Both commands will return n.
> 
> However, once dplyr is loaded,
> 
> length(df[,1]) will return a value of 1.
> 
> length(df$m1) and also length(df[[1]]) will correctly return n.
> 
> I know that using length() may not be the most elegant or efficient way to 
> get the value of n. However, what puzzles (and somewhat disturbs) me is that 
> loading of dplyr affects how length() works, without there being a warning or 
> masking message upon loading it.
> 
> Any clarification or comment would be welcome.

Presumably, dplyr changes how [.data.frame works (by altering the default for 
drop=, I expect) so that df[,1] is a data frame with 1 variable and not a 
vector. And yes, that _is_ somewhat disturbing.

-pd 

> 
> Thank you so much,
> 
> Karl
> 
> 
> -- 
> Karl Schilling
> 
> ______________________________________________
> R-help@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
Office: A 4.23
Email: pd....@cbs.dk  Priv: pda...@gmail.com

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

Reply via email to