That's exactly why I was asking if it really is equivalent and if there are issues using one function or the other -- 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 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 at rgzm.de > <mailto:calandra at 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://www.researchgate.net/profile/Ivan_Calandra > > 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 at rgzm.de > <mailto:calandra at rgzm.de> > > <mailto:calandra at rgzm.de <mailto:calandra at 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://www.researchgate.net/profile/Ivan_Calandra > > > >? ? ?______________________________________________ > >? ? ?R-help at r-project.org <mailto:R-help at r-project.org> > <mailto:R-help at r-project.org <mailto:R-help at 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. > > > > ______________________________________________ > R-help at r-project.org <mailto:R-help at 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. >
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 otherNot 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 at rgzm.de >> <mailto:calandra at 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 at rgzm.de >> <mailto:calandra at rgzm.de> >> > <mailto:calandra at rgzm.de <mailto:calandra at 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 at r-project.org <mailto:R-help at r-project.org> >> <mailto:R-help at r-project.org <mailto:R-help at 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 at r-project.org <mailto:R-help at 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 at 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 at fredhutch.org Phone: (206) 667-5791 Fax: (206) 667-1319
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 <calandra at rgzm.de >>> <mailto:calandra at 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 at rgzm.de >>> ???? <mailto:calandra at rgzm.de> >>> ???? > <mailto:calandra at rgzm.de <mailto:calandra at 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 at r-project.org <mailto:R-help at r-project.org> >>> ???? <mailto:R-help at r-project.org <mailto:R-help at 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 at r-project.org <mailto:R-help at 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 at 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. >> >