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

Hervé Pagès hp@ge@ @end|ng |rom |redhutch@org
Tue Apr 7 02:56:57 CEST 2020


Hi Ivan,

On 3/31/20 06:44, Ivan Calandra wrote:
> That's exactly why I was asking if it really is equivalent and if there
> are issues using one function or the other

Not that I know. It's mostly a matter of taste and code readability.

Either use the 2D interface:

    ncol(df), colnames(df), df[ , "somecol"], cbind(), etc...

or the list interface:

    length(df), names(df), df[["somecol"]], c(), etc...

to operate on your data.frames. They're equivalent. One advantage of 
using the latter though is that your code would also work on list 
objects that are not data.frames. But maybe you don't need or care about 
that in which case using one interface or the other makes no difference.

Note that the 2D interface is richer because it has nrow(), rownames(), 
rbind() that are not part of the list interface.

 From a code readability point of view I think one should be consistent 
and avoid mixing the 2 styles. For example IMO using length(df) and 
colnames(df) in the same function body is not good style. Either use 
length(df) and names(df), or use ncol(df) and colnames(df). If in the 
same function body you need to also access the rownames() then it would 
make sense to stick to the 2D interface throughout the entire body of 
your function.

Cheers,
H.

> 
> --
> 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://urldefense.proofpoint.com/v2/url?u=https-3A__www.researchgate.net_profile_Ivan-5FCalandra&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=rSFaISqU4VRbZBhLtnKvwJmxwkKQ0kAN0sIAfSBWUkw&e=
> 
> On 31/03/2020 15:39, Eric Berger wrote:
>> Yes it does because length(list) gives you the number of elements of
>> the list. And in the case of a data frame object that is the number of
>> columns, or ncol().
>>
>> On Tue, Mar 31, 2020 at 4:37 PM Ivan Calandra <calandra using rgzm.de
>> <mailto:calandra using rgzm.de>> wrote:
>>
>>      Thanks Eric,
>>
>>      I know that, but that doesn't really answer my question, does it?
>>
>>      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://urldefense.proofpoint.com/v2/url?u=https-3A__www.researchgate.net_profile_Ivan-5FCalandra&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=rSFaISqU4VRbZBhLtnKvwJmxwkKQ0kAN0sIAfSBWUkw&e=
>>
>>      On 31/03/2020 15:26, Eric Berger wrote:
>>      > A data frame is a special case of a list. It is a list of its
>>      columns.
>>      >
>>      > > is.list( your_data_frame )
>>      >
>>      > # TRUE
>>      >
>>      >
>>      > On Tue, Mar 31, 2020 at 4:04 PM Ivan Calandra <calandra using rgzm.de
>>      <mailto:calandra using rgzm.de>
>>      > <mailto:calandra using rgzm.de <mailto:calandra using rgzm.de>>> wrote:
>>      >
>>      >     Dear useRs,
>>      >
>>      >     I have a very simple question:
>>      >     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?
>>      >     Is one of them to be preferred for whatever reason?
>>      >
>>      >     Thanks 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://urldefense.proofpoint.com/v2/url?u=https-3A__www.researchgate.net_profile_Ivan-5FCalandra&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=rSFaISqU4VRbZBhLtnKvwJmxwkKQ0kAN0sIAfSBWUkw&e=
>>      >
>>      >     ______________________________________________
>>      >     R-help using r-project.org <mailto:R-help using r-project.org>
>>      <mailto:R-help using r-project.org <mailto:R-help using r-project.org>>
>>      mailing list --
>>      >     To UNSUBSCRIBE and more, see
>>      >     https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Dhelp&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=RzvpfqevFgNjYNRLX0nYF8un-5x7k-QG5h0465YA7mQ&e=
>>      >     PLEASE do read the posting guide
>>      >     https://urldefense.proofpoint.com/v2/url?u=http-3A__www.R-2Dproject.org_posting-2Dguide.html&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=kL6q9dyo4ScG-oZCxbTTWwVV389KO1pOpXMWZWd15bs&e=
>>      >     and provide commented, minimal, self-contained, reproducible
>>      code.
>>      >
>>
>>      ______________________________________________
>>      R-help using r-project.org <mailto:R-help using r-project.org> mailing list --
>>      To UNSUBSCRIBE and more, see
>>      https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Dhelp&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=RzvpfqevFgNjYNRLX0nYF8un-5x7k-QG5h0465YA7mQ&e=
>>      PLEASE do read the posting guide
>>      https://urldefense.proofpoint.com/v2/url?u=http-3A__www.R-2Dproject.org_posting-2Dguide.html&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=kL6q9dyo4ScG-oZCxbTTWwVV389KO1pOpXMWZWd15bs&e=
>>      and provide commented, minimal, self-contained, reproducible code.
>>
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Dhelp&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=RzvpfqevFgNjYNRLX0nYF8un-5x7k-QG5h0465YA7mQ&e=
> PLEASE do read the posting guide https://urldefense.proofpoint.com/v2/url?u=http-3A__www.R-2Dproject.org_posting-2Dguide.html&d=DwIDaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=yZXfRqVdJeNf73bgLhzIctzOWowNX-0ccnNHdReiprw&s=kL6q9dyo4ScG-oZCxbTTWwVV389KO1pOpXMWZWd15bs&e=
> and provide commented, minimal, self-contained, reproducible code.
> 

-- 
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages using fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



More information about the R-help mailing list