From wdunlap at tibco.com  Tue Aug 25 18:47:23 2015
From: wdunlap at tibco.com (William Dunlap)
Date: Tue, 25 Aug 2015 09:47:23 -0700
Subject: [Rd] match()/%in% with language objects?
In-Reply-To: <55DC940B.8080701@gmail.com>
References: <55DC940B.8080701@gmail.com>
Message-ID: <CAF8bMcbLb1FT2B4umf6jAYAB0hRBViaqA+c7W-XmDn5DrunoBA@mail.gmail.com>

match(x,table) and x%in%table work when x and table are lists of language
objects or expressions.  E.g.,

  expression(quote(1+2), quote(log2(16))) %in% expression(3, quote(1+2),
c(4L,5L,6L,7L))
  #[1]  TRUE FALSE
  list(quote(1+2), quote(log2(16))) %in% list(3, quote(1+2), c(4L,5L,6L,7L))
  #[1]  TRUE FALSE
  match(list(quote(1+2), quote(log2(16))),  list(3, quote(1+2),
c(4L,5L,6L,7L)))
  #[1]  2 NA

With your example data:
  spList[1] %in% spList
  #[1] TRUE
  list(quote(foo)) %in% spList
  #[1] TRUE
  list(quote(nosuchsymbol)) %in% spList
  #[1] FALSE





Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Tue, Aug 25, 2015 at 9:12 AM, Ben Bolker <bbolker at gmail.com> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
>   I haven't yet dug into the internals of match() yet to see what's
> going on, but I'm wondering whether there's a design reason why I
> can't use %in% (which is a wrapper for match()) on language objects.
>
> I'd like to test whether a language object is in a list of language
> objects, but I get the error "'match' requires vector arguments":
>
> specials <- c("foo","bar")
> spList <- lapply(specials,as.name)  ## convert to language objects
> "a" %in% spList  ## works (FALSE)
> spList[[1]] %in% spList ##   'match' requires vector arguments
> quote(foo) %in% spList  ## ditto
> quote(foo) == spList[[1]]  ## TRUE
>
> obviously I can go the other way, converting my target into text:
>
> deparse(spList[[1]]) %in% specials  ## TRUE
>
>  I could also write my own function to loop through the list and stop
> when I find it.  But I'd prefer to use built-in functionality if possible.
>
>   Does anyone have any clues/see what I'm missing?
>
>   cheers
>     Ben Bolker
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
>
> iQEcBAEBAgAGBQJV3JQLAAoJEOCV5YRblxUHTEkIAJluX0F2bLGW1jt1FP2UEZs1
> hucBzPGxpHdGE0CAE2Q2rPtKPmJsZdOpkpBPcxorLj4F6C70yY9QmdNlZ1i/spQB
> k33EbUsD2XZGcfIVRGSnc1q9QS2vcWRuyC89GRle8xPVD8MfwiV/EMQi4hBk1v9q
> TTOug7e1c+I+PtbvrQHpQrCc/1h609I7UqPCOdYbak3xwQC4VNSJ1A8n5w4N+RsV
> UVEMkOmhLnwzk6pSSC0dbyOKUluklc5ZYBX8aEM0Cd9bUYhoqc2aXUc7ocsL3f9J
> BHlDhy0kfjfwv4wqg/sFKLMIX2IQPxM2zrcd3v1hhEXOYGi7KoHHpZaihbFmEfQ=
> =w3OR
> -----END PGP SIGNATURE-----
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

	[[alternative HTML version deleted]]



[Rd] match()/%in% with language objects?
William Dunlap