[R] ncol() vs. length() on data.frames

William Michels wjm1 @end|ng |rom c@@@co|umb|@@edu
Tue Mar 31 17:35:27 CEST 2020


Hi Ivan,

Like Ivan Krylov, I'm not aware of circumstances for simple dataframes
where ncol(DF) does not equal length(DF).

As I understand it, using ncol() versus length() is important when
you're examining an object returned from a function like sapply(),
since sapply() will simplify one-column dataframes to vectors. Much
has been made of this sapply() feature, but it's simple enough in your
code to test whether or not an object returned by sapply() has NULL
columns:

> dim(testDF)
[1] 14  8
> length(testDF)
[1] 8
> length(testDF[1])
[1] 1
> length(testDF[, 1])
[1] 14
>
> ncol(testDF)
[1] 8
> ncol(testDF[1])
[1] 1
> ncol(testDF[, 1])
NULL
> is.null(ncol(testDF[, 1]))
[1] TRUE
>

HTH, Bill.

W. Michels, Ph.D.






On Tue, Mar 31, 2020 at 7:11 AM Ivan Calandra <calandra using rgzm.de> wrote:
>
> Thanks Ivan for the answer.
>
> So it confirms my first thought that these two functions are equivalent
> when applied to a "simple" data.frame.
>
> The reason I was asking is because I have gotten used to use length() in
> my scripts. It works perfectly and I understand it easily. But to be
> honest, ncol() is more intuitive to most users (especially the novice)
> so I was thinking about switching to using this function instead (all my
> data.frames are created from read.csv() or similar functions so there
> should not be any issue). But before doing that, I want to be sure that
> it is not going to create unexpected results.
>
> Thank you,
> Ivan
>
> --
> Dr. Ivan Calandra
> TraCEr, laboratory for Traceology and Controlled Experiments
> MONREPOS Archaeological Research Centre and
> Museum for Human Behavioural Evolution
> Schloss Monrepos
> 56567 Neuwied, Germany
> +49 (0) 2631 9772-243
> https://www.researchgate.net/profile/Ivan_Calandra
>
> On 31/03/2020 16:00, Ivan Krylov wrote:
> > On Tue, 31 Mar 2020 14:47:54 +0200
> > Ivan Calandra <calandra using rgzm.de> wrote:
> >
> >> On a simple data.frame (i.e. each element is a vector), ncol() and
> >> length() will give the same result.
> >> Are they just equivalent on such objects, or are they differences in
> >> some cases?
> > I am not aware of any exceptions to ncol(dataframe)==length(dataframe)
> > (in fact, ncol(x) is dim(x)[2L] and ?dim says that dim(dataframe)
> > returns c(length(attr(dataframe, 'row.names')), length(dataframe))), but
> > watch out for AsIs columns which can have columns of their own:
> >
> > x <- data.frame(I(volcano))
> > dim(x)
> > # [1] 87  1
> > length(x)
> > # [1] 1
> > dim(x[,1])
> > # [1] 87 61
> >
> >
>
> ______________________________________________
> R-help using 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.



More information about the R-help mailing list