I am dealing with an object that sometimes has a certain attribute, sometimes doesn't. How do I check for this? "exists" doesn't work... ====================== > z=c() > z$a = c("c", "d", "f") > z $a [1] "c" "d" "f" > exists("z") [1] TRUE > exists("z$a") [1] FALSE ====================== ...basically, I want something that returns TRUE if the $a exists in z... Thanks! Nick -- ===================================================Nicholas J. Matzke Ph.D. Candidate, Graduate Student Researcher Huelsenbeck Lab Center for Theoretical Evolutionary Genomics 4151 VLSB (Valley Life Sciences Building) Department of Integrative Biology University of California, Berkeley Graduate Student Instructor, IB200B Principles of Phylogenetics: Ecology and Evolution http://ib.berkeley.edu/courses/ib200b/ http://phylo.wikidot.com/ Lab websites: http://ib.berkeley.edu/people/lab_detail.php?lab=54 http://fisher.berkeley.edu/cteg/hlab.html Dept. personal page: http://ib.berkeley.edu/people/students/person_detail.php?person=370 Lab personal page: http://fisher.berkeley.edu/cteg/members/matzke.html Lab phone: 510-643-6299 Dept. fax: 510-643-6264 Cell phone: 510-301-0179 Email: matzke at berkeley.edu Mailing address: Department of Integrative Biology 3060 VLSB #3140 Berkeley, CA 94720-3140 ----------------------------------------------------- "[W]hen people thought the earth was flat, they were wrong. When people thought the earth was spherical, they were wrong. But if you think that thinking the earth is spherical is just as wrong as thinking the earth is flat, then your view is wronger than both of them put together." Isaac Asimov (1989). "The Relativity of Wrong." The Skeptical Inquirer, 14(1), 35-44. Fall 1989. http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
Oh wait, this basically does it: > if ("a" %in% attributes(z)$names) + print(TRUE) [1] TRUE (but there may be a better way) Cheers! Nick On 2/2/11 7:20 PM, Nick Matzke wrote:> I am dealing with an object that sometimes has a certain > attribute, sometimes doesn't. How do I check for this? > "exists" doesn't work... > > ======================> > z=c() > > z$a = c("c", "d", "f") > > z > $a > [1] "c" "d" "f" > > > exists("z") > [1] TRUE > > > exists("z$a") > [1] FALSE > ======================> > ...basically, I want something that returns TRUE if the $a > exists in z... > > Thanks! > Nick > > >-- ===================================================Nicholas J. Matzke Ph.D. Candidate, Graduate Student Researcher Huelsenbeck Lab Center for Theoretical Evolutionary Genomics 4151 VLSB (Valley Life Sciences Building) Department of Integrative Biology University of California, Berkeley Graduate Student Instructor, IB200B Principles of Phylogenetics: Ecology and Evolution http://ib.berkeley.edu/courses/ib200b/ http://phylo.wikidot.com/ Lab websites: http://ib.berkeley.edu/people/lab_detail.php?lab=54 http://fisher.berkeley.edu/cteg/hlab.html Dept. personal page: http://ib.berkeley.edu/people/students/person_detail.php?person=370 Lab personal page: http://fisher.berkeley.edu/cteg/members/matzke.html Lab phone: 510-643-6299 Dept. fax: 510-643-6264 Cell phone: 510-301-0179 Email: matzke at berkeley.edu Mailing address: Department of Integrative Biology 3060 VLSB #3140 Berkeley, CA 94720-3140 ----------------------------------------------------- "[W]hen people thought the earth was flat, they were wrong. When people thought the earth was spherical, they were wrong. But if you think that thinking the earth is spherical is just as wrong as thinking the earth is flat, then your view is wronger than both of them put together." Isaac Asimov (1989). "The Relativity of Wrong." The Skeptical Inquirer, 14(1), 35-44. Fall 1989. http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
On Wed, Feb 2, 2011 at 7:22 PM, Nick Matzke <matzke at berkeley.edu> wrote:> Oh wait, this basically does it: > >> if ("a" %in% attributes(z)$names) > + print(TRUE) > [1] TRUE > > (but there may be a better way)If z is a list, you can test is.null(z$a) Peter
On Wed, Feb 2, 2011 at 7:25 PM, Peter Langfelder <peter.langfelder at gmail.com> wrote:> On Wed, Feb 2, 2011 at 7:22 PM, Nick Matzke <matzke at berkeley.edu> wrote: >> Oh wait, this basically does it: >> >>> if ("a" %in% attributes(z)$names) >> + print(TRUE) >> [1] TRUE >> >> (but there may be a better way) > > If z is a list, you can test > > is.null(z$a)Nope, e.g.> z <- list(a=NULL) > str(z)List of 1 $ a: NULL Instead, test by:> is.element("a", names(z))[1] TRUE or equivalently> ("a" %in% names(z))[1] TRUE or> any(names(z) == "a")[1] TRUE My $.02 /Henrik> > Peter > > ______________________________________________ > R-help at r-project.org mailing list > 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. >