Hi Joe,
you could also rethink your pattern:
grep("x1 \\+ x2", test, value = TRUE)
grep("x1 \\+ x", test, value = TRUE)
grep("x1 \\+ x[0-9]", test, value = TRUE)
HTH
Ulrik
On Wed, 22 Mar 2017 at 02:10 Jim Lemon <drjimlemon at gmail.com> wrote:
> Hi Joe,
> This may help you:
>
> test <- c("x1", "x2", "x3", "x1 + x2
+ x3")
> multigrep<-function(x1,x2) {
> xbits<-unlist(strsplit(x1," "))
> nbits<-length(xbits)
> xans<-rep(FALSE,nbits)
> for(i in 1:nbits) if(length(grep(xbits[i],x2))) xans[i]<-TRUE
> return(all(xans))
> }
> multigrep("x1 + x3","x1 + x2 + x3")
> [1] TRUE
> multigrep("x1 + x4","x1 + x2 + x3")
> [1] FALSE
>
> Jim
>
> On Wed, Mar 22, 2017 at 10:50 AM, Joe Ceradini <joeceradini at
gmail.com>
> wrote:
> > Hi Folks,
> >
> > Is there a way to find "x1 + x2 + x3" given "x1 +
x3" as the pattern?
> > Or is that a ridiculous question, since I'm trying to find
something
> > based on a pattern that doesn't exist?
> >
> > test <- c("x1", "x2", "x3", "x1
+ x2 + x3")
> > test
> > [1] "x1" "x2" "x3"
"x1 + x2 + x3"
> >
> > grep("x1 + x2", test, fixed=TRUE, value = TRUE)
> > [1] "x1 + x2 + x3"
> >
> >
> > But what if only have "x1 + x3" as the pattern and still
want to
> > return "x1 + x2 + x3"?
> >
> > grep("x1 + x3", test, fixed=TRUE, value = TRUE)
> > character(0)
> >
> > I'm sure this looks like an odd question. I'm trying to build
a
> > function and stuck on this. Rather than dropping the whole function on
> > the list, I thought I'd try one piece I needed help
with...although I
> > suspect that this question itself probably does bode well for my
> > function :)
> >
> > Thanks!
> > Joe
> >
> > ______________________________________________
> > 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 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]]
Wow. Thanks to everyone (Jim, Ng Bo Lin, Bert, David, and Ulrik) for all the quick and helpful responses. They have given me a better understanding of regular expressions, and certainly answered my question. Joe On Wed, Mar 22, 2017 at 12:22 AM, Ulrik Stervbo <ulrik.stervbo at gmail.com> wrote:> Hi Joe, > > you could also rethink your pattern: > > grep("x1 \\+ x2", test, value = TRUE) > > grep("x1 \\+ x", test, value = TRUE) > > grep("x1 \\+ x[0-9]", test, value = TRUE) > > HTH > Ulrik > > On Wed, 22 Mar 2017 at 02:10 Jim Lemon <drjimlemon at gmail.com> wrote: >> >> Hi Joe, >> This may help you: >> >> test <- c("x1", "x2", "x3", "x1 + x2 + x3") >> multigrep<-function(x1,x2) { >> xbits<-unlist(strsplit(x1," ")) >> nbits<-length(xbits) >> xans<-rep(FALSE,nbits) >> for(i in 1:nbits) if(length(grep(xbits[i],x2))) xans[i]<-TRUE >> return(all(xans)) >> } >> multigrep("x1 + x3","x1 + x2 + x3") >> [1] TRUE >> multigrep("x1 + x4","x1 + x2 + x3") >> [1] FALSE >> >> Jim >> >> On Wed, Mar 22, 2017 at 10:50 AM, Joe Ceradini <joeceradini at gmail.com> >> wrote: >> > Hi Folks, >> > >> > Is there a way to find "x1 + x2 + x3" given "x1 + x3" as the pattern? >> > Or is that a ridiculous question, since I'm trying to find something >> > based on a pattern that doesn't exist? >> > >> > test <- c("x1", "x2", "x3", "x1 + x2 + x3") >> > test >> > [1] "x1" "x2" "x3" "x1 + x2 + x3" >> > >> > grep("x1 + x2", test, fixed=TRUE, value = TRUE) >> > [1] "x1 + x2 + x3" >> > >> > >> > But what if only have "x1 + x3" as the pattern and still want to >> > return "x1 + x2 + x3"? >> > >> > grep("x1 + x3", test, fixed=TRUE, value = TRUE) >> > character(0) >> > >> > I'm sure this looks like an odd question. I'm trying to build a >> > function and stuck on this. Rather than dropping the whole function on >> > the list, I thought I'd try one piece I needed help with...although I >> > suspect that this question itself probably does bode well for my >> > function :) >> > >> > Thanks! >> > Joe >> > >> > ______________________________________________ >> > 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 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.-- Cooperative Fish and Wildlife Research Unit Zoology and Physiology Dept. University of Wyoming JoeCeradini at gmail.com / 914.707.8506 wyocoopunit.org
You did not describe the goal of your pattern matching. Were you trying
to match any string that could be interpreted as an R expression containing
X1 and X3 as additive terms? If so, you could turn the string into a one-sided
formula and use the terms() function. E.g.,
f <- function(string) {
fmla <- as.formula(paste("~", string))
term.labels <- attr(terms(fmla), "term.labels")
all(c("X1","X3") %in% term.labels)
}
> f("X3 + X2 + X1")
[1] TRUE> f("- X3 + X2 + X1")
[1] FALSE> f("X3 + X2 + log(X1)")
[1] FALSE> f("X3 + X2 + log(X1) + X1")
[1] TRUE
Bill Dunlap
TIBCO Software
wdunlap tibco.com
On Wed, Mar 22, 2017 at 6:39 AM, Joe Ceradini <joeceradini at gmail.com>
wrote:> Wow. Thanks to everyone (Jim, Ng Bo Lin, Bert, David, and Ulrik) for
> all the quick and helpful responses. They have given me a better
> understanding of regular expressions, and certainly answered my
> question.
>
> Joe
>
> On Wed, Mar 22, 2017 at 12:22 AM, Ulrik Stervbo <ulrik.stervbo at
gmail.com> wrote:
>> Hi Joe,
>>
>> you could also rethink your pattern:
>>
>> grep("x1 \\+ x2", test, value = TRUE)
>>
>> grep("x1 \\+ x", test, value = TRUE)
>>
>> grep("x1 \\+ x[0-9]", test, value = TRUE)
>>
>> HTH
>> Ulrik
>>
>> On Wed, 22 Mar 2017 at 02:10 Jim Lemon <drjimlemon at gmail.com>
wrote:
>>>
>>> Hi Joe,
>>> This may help you:
>>>
>>> test <- c("x1", "x2", "x3",
"x1 + x2 + x3")
>>> multigrep<-function(x1,x2) {
>>> xbits<-unlist(strsplit(x1," "))
>>> nbits<-length(xbits)
>>> xans<-rep(FALSE,nbits)
>>> for(i in 1:nbits) if(length(grep(xbits[i],x2))) xans[i]<-TRUE
>>> return(all(xans))
>>> }
>>> multigrep("x1 + x3","x1 + x2 + x3")
>>> [1] TRUE
>>> multigrep("x1 + x4","x1 + x2 + x3")
>>> [1] FALSE
>>>
>>> Jim
>>>
>>> On Wed, Mar 22, 2017 at 10:50 AM, Joe Ceradini <joeceradini at
gmail.com>
>>> wrote:
>>> > Hi Folks,
>>> >
>>> > Is there a way to find "x1 + x2 + x3" given "x1
+ x3" as the pattern?
>>> > Or is that a ridiculous question, since I'm trying to find
something
>>> > based on a pattern that doesn't exist?
>>> >
>>> > test <- c("x1", "x2", "x3",
"x1 + x2 + x3")
>>> > test
>>> > [1] "x1" "x2"
"x3" "x1 + x2 + x3"
>>> >
>>> > grep("x1 + x2", test, fixed=TRUE, value = TRUE)
>>> > [1] "x1 + x2 + x3"
>>> >
>>> >
>>> > But what if only have "x1 + x3" as the pattern and
still want to
>>> > return "x1 + x2 + x3"?
>>> >
>>> > grep("x1 + x3", test, fixed=TRUE, value = TRUE)
>>> > character(0)
>>> >
>>> > I'm sure this looks like an odd question. I'm trying
to build a
>>> > function and stuck on this. Rather than dropping the whole
function on
>>> > the list, I thought I'd try one piece I needed help
with...although I
>>> > suspect that this question itself probably does bode well for
my
>>> > function :)
>>> >
>>> > Thanks!
>>> > Joe
>>> >
>>> > ______________________________________________
>>> > 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 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.
>
>
>
> --
> Cooperative Fish and Wildlife Research Unit
> Zoology and Physiology Dept.
> University of Wyoming
> JoeCeradini at gmail.com / 914.707.8506
> wyocoopunit.org
>
> ______________________________________________
> 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.