Dear useRs,
I feel really stupid, but I cannot understand why "&" doesn't
work as I
expect, while "|" does.
I have the following vector:
mydata <- c("SSFA-ConfoMap_GuineaPigs_NMPfilled.csv",
"SSFA-ConfoMap_Lithics_NMPfilled.csv",?
"SSFA-ConfoMap_Sheeps_NMPfilled.csv",
"SSFA-Toothfrax_GuineaPigs.xlsx",
"SSFA-Toothfrax_Lithics.xlsx", "SSFA-Toothfrax_Sheeps.xlsx")
and I want to find the values that include both "ConfoMap" and
"GuineaPigs".
If I do:
grep("ConfoMap&GuineaPigs", mydata, value=TRUE)
it returns an empty vector, character(0).
But if I do:
grep("ConfoMap|GuineaPigs", mydata, value=TRUE)
it returns all the elements that include either "ConfoMap" or
"GuineaPigs", as I would expect.
So what is wrong with my "&" construct? How can I return the
elements
that include both parts?
Thank you for your help!
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
"&" is not a regex metacharacter. See ?regexp Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Wed, Aug 19, 2020 at 7:53 AM Ivan Calandra <calandra at rgzm.de> wrote:> Dear useRs, > > I feel really stupid, but I cannot understand why "&" doesn't work as I > expect, while "|" does. > > I have the following vector: > mydata <- c("SSFA-ConfoMap_GuineaPigs_NMPfilled.csv", > "SSFA-ConfoMap_Lithics_NMPfilled.csv", > "SSFA-ConfoMap_Sheeps_NMPfilled.csv", "SSFA-Toothfrax_GuineaPigs.xlsx", > "SSFA-Toothfrax_Lithics.xlsx", "SSFA-Toothfrax_Sheeps.xlsx") > and I want to find the values that include both "ConfoMap" and > "GuineaPigs". > > If I do: > grep("ConfoMap&GuineaPigs", mydata, value=TRUE) > it returns an empty vector, character(0). > > But if I do: > grep("ConfoMap|GuineaPigs", mydata, value=TRUE) > it returns all the elements that include either "ConfoMap" or > "GuineaPigs", as I would expect. > > So what is wrong with my "&" construct? How can I return the elements > that include both parts? > > Thank you for your help! > 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 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. >[[alternative HTML version deleted]]
mydata[ intersect( grep("ConfoMap", mydata),
grep("GuineaPigs", mydata) ) ]
On Wed, Aug 19, 2020 at 6:13 PM Bert Gunter <bgunter.4567 at gmail.com>
wrote:
> "&" is not a regex metacharacter.
> See ?regexp
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
and
> sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip
)
>
>
> On Wed, Aug 19, 2020 at 7:53 AM Ivan Calandra <calandra at rgzm.de>
wrote:
>
> > Dear useRs,
> >
> > I feel really stupid, but I cannot understand why "&"
doesn't work as I
> > expect, while "|" does.
> >
> > I have the following vector:
> > mydata <- c("SSFA-ConfoMap_GuineaPigs_NMPfilled.csv",
> > "SSFA-ConfoMap_Lithics_NMPfilled.csv",
> > "SSFA-ConfoMap_Sheeps_NMPfilled.csv",
"SSFA-Toothfrax_GuineaPigs.xlsx",
> > "SSFA-Toothfrax_Lithics.xlsx",
"SSFA-Toothfrax_Sheeps.xlsx")
> > and I want to find the values that include both "ConfoMap"
and
> > "GuineaPigs".
> >
> > If I do:
> > grep("ConfoMap&GuineaPigs", mydata, value=TRUE)
> > it returns an empty vector, character(0).
> >
> > But if I do:
> > grep("ConfoMap|GuineaPigs", mydata, value=TRUE)
> > it returns all the elements that include either "ConfoMap"
or
> > "GuineaPigs", as I would expect.
> >
> > So what is wrong with my "&" construct? How can I return
the elements
> > that include both parts?
> >
> > Thank you for your help!
> > 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 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.
> >
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>
[[alternative HTML version deleted]]
Thank you Bert for the pointer.
So I guess the solution is:
grep("ConfoMap.+GuineaPigs", mydata, value=TRUE)
This is not the case here, but what if "GuineaPigs" comes before
"ConfoMap"?
Of course I could do two "grep()" calls, but if there a better
solution?
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 19/08/2020 17:07, Bert Gunter wrote:> "&" is not a regex metacharacter.
> See ?regexp
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip
)
>
>
> On Wed, Aug 19, 2020 at 7:53 AM Ivan Calandra <calandra at rgzm.de
> <mailto:calandra at rgzm.de>> wrote:
>
> Dear useRs,
>
> I feel really stupid, but I cannot understand why "&"
doesn't work
> as I
> expect, while "|" does.
>
> I have the following vector:
> mydata <- c("SSFA-ConfoMap_GuineaPigs_NMPfilled.csv",
> "SSFA-ConfoMap_Lithics_NMPfilled.csv",?
> "SSFA-ConfoMap_Sheeps_NMPfilled.csv",
> "SSFA-Toothfrax_GuineaPigs.xlsx",
> "SSFA-Toothfrax_Lithics.xlsx",
"SSFA-Toothfrax_Sheeps.xlsx")
> and I want to find the values that include both "ConfoMap"
and
> "GuineaPigs".
>
> If I do:
> grep("ConfoMap&GuineaPigs", mydata, value=TRUE)
> it returns an empty vector, character(0).
>
> But if I do:
> grep("ConfoMap|GuineaPigs", mydata, value=TRUE)
> it returns all the elements that include either "ConfoMap" or
> "GuineaPigs", as I would expect.
>
> So what is wrong with my "&" construct? How can I return
the elements
> that include both parts?
>
> Thank you for your help!
> 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> 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.
>
There are & and | operators in the R language.
There is an | operator in regular expressions.
There is NOT any & operator in regular expressions.
grep("ConfoMap&GuineaPigs", mydata, value=TRUE)
looks for elements of mydata containing the literal
string 'ConfoMap&GuineaPigs'.
> foo <- c("a","b","cab","back")
> foo[grepl("a",foo) & grepl("b",foo)]
[1] "cab" "back"
grepl returns a TRUE/FALSE vector.
On Thu, 20 Aug 2020 at 02:53, Ivan Calandra <calandra at rgzm.de> wrote:
> Dear useRs,
>
> I feel really stupid, but I cannot understand why "&"
doesn't work as I
> expect, while "|" does.
>
> I have the following vector:
> mydata <- c("SSFA-ConfoMap_GuineaPigs_NMPfilled.csv",
> "SSFA-ConfoMap_Lithics_NMPfilled.csv",
> "SSFA-ConfoMap_Sheeps_NMPfilled.csv",
"SSFA-Toothfrax_GuineaPigs.xlsx",
> "SSFA-Toothfrax_Lithics.xlsx",
"SSFA-Toothfrax_Sheeps.xlsx")
> and I want to find the values that include both "ConfoMap" and
> "GuineaPigs".
>
> If I do:
> grep("ConfoMap&GuineaPigs", mydata, value=TRUE)
> it returns an empty vector, character(0).
>
> But if I do:
> grep("ConfoMap|GuineaPigs", mydata, value=TRUE)
> it returns all the elements that include either "ConfoMap" or
> "GuineaPigs", as I would expect.
>
> So what is wrong with my "&" construct? How can I return the
elements
> that include both parts?
>
> Thank you for your help!
> 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 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.
>
[[alternative HTML version deleted]]
Thank you all for all the very helpful answers! 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 20/08/2020 3:28, Richard O'Keefe wrote:> There are & and | operators in the R language. > There is an | operator in regular expressions. > There is NOT any & operator in regular expressions. > grep("ConfoMap&GuineaPigs", mydata, value=TRUE) > looks for elements of mydata containing the literal > string 'ConfoMap&GuineaPigs'. > > > foo <- c("a","b","cab","back") > > foo[grepl("a",foo) & grepl("b",foo)] > [1] "cab" ?"back" > > grepl returns a TRUE/FALSE vector. > > On Thu, 20 Aug 2020 at 02:53, Ivan Calandra <calandra at rgzm.de > <mailto:calandra at rgzm.de>> wrote: > > Dear useRs, > > I feel really stupid, but I cannot understand why "&" doesn't work > as I > expect, while "|" does. > > I have the following vector: > mydata <- c("SSFA-ConfoMap_GuineaPigs_NMPfilled.csv", > "SSFA-ConfoMap_Lithics_NMPfilled.csv",? > "SSFA-ConfoMap_Sheeps_NMPfilled.csv", > "SSFA-Toothfrax_GuineaPigs.xlsx", > "SSFA-Toothfrax_Lithics.xlsx", "SSFA-Toothfrax_Sheeps.xlsx") > and I want to find the values that include both "ConfoMap" and > "GuineaPigs". > > If I do: > grep("ConfoMap&GuineaPigs", mydata, value=TRUE) > it returns an empty vector, character(0). > > But if I do: > grep("ConfoMap|GuineaPigs", mydata, value=TRUE) > it returns all the elements that include either "ConfoMap" or > "GuineaPigs", as I would expect. > > So what is wrong with my "&" construct? How can I return the elements > that include both parts? > > Thank you for your help! > 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> 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. >