Dear Hervé, This is indeed a wise recommendation; I hadn't thought about colnames() vs. names(), and in general 2D vs. list notations. I will have to edit a bit more than I thought.
Thank you all for all these hints! Best, 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 07/04/2020 02:56, Hervé Pagès wrote: > 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 <calan...@rgzm.de >>> <mailto:calan...@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 <calan...@rgzm.de >>> <mailto:calan...@rgzm.de> >>> > <mailto:calan...@rgzm.de <mailto:calan...@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@r-project.org <mailto:R-help@r-project.org> >>> <mailto:R-help@r-project.org <mailto:R-help@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@r-project.org <mailto:R-help@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@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@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.