Re: [R] Substring replacement in string

2015-03-01 Thread Hervé Pagès

Hi Alrik,

On 02/28/2015 11:06 PM, Alrik Thiem wrote:

Dear Hervé,

Many thanks for your suggestion. Gabor Grothendieck proposed a simple
one-liner that works perfectly for my purposes:

gsub((\\b[a-oq-z][a-z0-9]*), 1-\\U\\1, x, perl = TRUE)

where x is the respective string.


Sounds good. I didn't realize that you also wanted to prefix the lower
case letters with 1 -  so my solution was not doing the right thing
anyway. Here is the corrected solution, just in case:

  library(Biostrings)

  funnyReplace - function(x, protected_words)
  {
x - BString(x)

## Extract the substrings to modify (target substrings).
protected_regions - reduce(do.call(c, lapply(protected_words, 
matchPattern, x)))

target_regions - ranges(gaps(protected_regions))
target_substrings - extractAt(x, target_regions)

## Modify them (using a reg exp almost like Gabbor's except
## that p is not treated as an exception).
target_substrings - gsub((\\b[a-z][a-z0-9]*), 1 - \\U\\1, 
target_substrings, perl=TRUE)


## Replace in original string.
x - replaceAt(x, target_regions, target_substrings)
as.character(x)
}

Then:

   x - pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))
   funnyReplace(x, c(pmin, pmax))
  [1] pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

It works even if a variable name starts with a p:

   funnyReplace(pmin(p), c(pmin, pmax))
  [1] pmin(1 - P)

and you can specify an arbitrary number of protected words.

Cheers,
H.



Best wishes,
Alrik

-Ursprüngliche Nachricht-
Von: Hervé Pagès [mailto:hpa...@fredhutch.org]
Gesendet: Samstag, 28. Februar 2015 23:29
An: Alrik Thiem; r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

Hi Alrik,

With the Biostrings/IRanges infrastructure (Bioconductor packages), you
can do this with:

library(Biostrings)
x0 - BString(pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1,
z1)))
donttouch_words - c(pmin, pmax)

## Extract the substrings to modify (target substrings).
donttouch_regions - reduce(do.call(c, lapply(donttouch_words,
matchPattern, x0)))
target_regions - ranges(gaps(donttouch_regions))
target_substrings - extractAt(x0, target_regions)

## Modify them.
old - paste0(letters, collapse=)
new - paste0(LETTERS, collapse=)
target_substrings - chartr(old, new, target_substrings)

## Replace in original string.
x1 - replaceAt(x0, target_regions, target_substrings)

Then:

 x1
  57-letter BString instance
seq: pmin(pmax(pmin(X1, X2), pmin(X3, X4)) == Y, pmax(Z1, Z1))

 as.character(x1)
[1] pmin(pmax(pmin(X1, X2), pmin(X3, X4)) == Y, pmax(Z1, Z1))

Hope this helps,
H.

On 02/27/2015 02:19 PM, Alrik Thiem wrote:

Dear R-help list,

I would like to replace all lower-case letters in a string that are not

part

of certain fixed expressions. For example, I have the string:

pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

Where I would like to replace all lower-case letters that do not belong to
the functions pmin and pmax by 1 - toupper(...) to get

pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

Any ideas on how I could achieve that?

Many thanks and best wishes,

Alrik



Alrik Thiem
Post-Doctoral Researcher

Department of Philosophy
University of Geneva
Rue de Candolle 2
CH-1211 Geneva

+41 76 527 80 83

http://www.alrik-thiem.net
http://www.compasss.org

__
R-help@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.





--
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: hpa...@fredhutch.org
Phone:  (206) 667-5791
Fax:(206) 667-1319

__
R-help@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.


Re: [R] Substring replacement in string

2015-02-28 Thread Gabor Grothendieck
On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
 I would like to replace all lower-case letters in a string that are not part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))


Assuming x is the input string:

gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))



-- 
Statistics  Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

__
R-help@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.


Re: [R] Substring replacement in string

2015-02-28 Thread Alrik Thiem
Dear Michael

I'm not sure how you mean this. Maybe a more general description of my problem 
is helpful for clarifying.

What I have to deal with are truth table output functions that always take, for 
example, the following form:

Delta - (a*B+a*C*d=Y)*(E+e)

I.e. these functions will always have the structure (.*.+.*.+...=.)*(.+.), 
where the dots in the antecedent could be further conjunctions of unspecified 
complexity. I now need to filter all rows from the truth table that are 
compatible with this output function. To create the input part of the truth 
table tt for Delta above, I do:

library(QCA) # createMatrix() function is part of this package
Delta.upper - toupper(Delta)
f.names - unique(unlist(strsplit(Delta.upper, [(*+=)])))
f.names - f.names[f.names != ]
tt - data.frame(createMatrix(rep(2, length(f.names
dimnames(tt) - list(as.character(seq(2^length(f.names))), f.names)
tt

 tt
   A B C D Y E
1  0 0 0 0 0 0
2  0 0 0 0 0 1
.  . . . . . .
63 1 1 1 1 1 0
64 1 1 1 1 1 1

I now need to transform Delta into a string of the following form in order to 
extract the subset of compatible rows from tt:

pmin(pmax(pmin(1-tt$A,tt$B),pmin(1-tt$A,tt$C,1-tt$D))==tt$Y,pmax(tt$E,1-tt$E))==TRUE

With this string, I can then do:

 tt[pmin(pmax(pmin(1-tt$A,tt$B), 
 pmin(1-tt$A,tt$C,1-tt$D))==tt$Y,pmax(tt$E,1-tt$E))==TRUE, ]
   A B C D Y E
1  0 0 0 0 0 0
2  0 0 0 0 0 1
.  . . . . . .
61 1 1 1 1 0 0
62 1 1 1 1 0 1

-Ursprüngliche Nachricht-
Von: Michael Dewey [mailto:i...@aghmed.fsnet.co.uk] 
Gesendet: Samstag, 28. Februar 2015 14:50
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

Dear Alrik

This may seem a silly suggestion but why not just define new functions 
PMIN and PMAX to call pmin and pmax. Obviously that does not solve your 
problem if it is more general than your example.

On 28/02/2015 13:16, Alrik Thiem wrote:
 Dear Gabor,

 Many thanks. Works like a charm, but I can't get it to work with

 pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

 i.e., with strings where there're no integers following the components in the 
 pmin/pmax functions. Could this be generalized to handle both cases?

 Best wishes,
 Alrik

 -Ursprüngliche Nachricht-
 Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Gesendet: Samstag, 28. Februar 2015 13:35
 An: Alrik Thiem
 Cc: r-help@r-project.org
 Betreff: Re: [R] Substring replacement in string

 On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
 I would like to replace all lower-case letters in a string that are not part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))


 Assuming x is the input string:

 gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
 ## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))




-- 
Michael
http://www.dewey.myzen.co.uk

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread William Dunlap
  string - pmin(1, x)
  expr - parse(text=string)[[1]]

will convert the string to an unevaluated language object.

Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Feb 27, 2015 at 11:25 PM, Alrik Thiem alrik.th...@gmail.com wrote:

 Many thanks. Unfortunately, I cannot work directly on these expressions
 since they’re only created from other strings. Would I first have to
 transform these strings to unevaluated expressions?



 *Von:* William Dunlap [mailto:wdun...@tibco.com]
 *Gesendet**:* Freitag, 27. Februar 2015 23:39
 *An:* Alrik Thiem
 *Cc:* r-help@r-project.org
 *Betreff:* Re: [R] Substring replacement in string



 If your string will always represent an R expression, you could work with

 the expression directly with functions like all.names() and substitute().



 f - function (expr)

 {

 toReplace - setdiff(all.names(expr), c(pmin, pmax))

 toReplace - grep(value = TRUE, [a-z], toReplace)

 names(toReplace) - toReplace

 replacementList - lapply(toReplace, function(name) call(-,

 1, as.name(toupper(name

 do.call(substitute, list(expr, replacementList))

 }



  In - quote(pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1)))

  Desired - quote(pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y,
 pmax(Z1, 1 - Z1)))

  all.equal(Desired, f(In))

 [1] TRUE










 Bill Dunlap
 TIBCO Software
 wdunlap tibco.com



 On Fri, Feb 27, 2015 at 2:19 PM, Alrik Thiem alrik.th...@gmail.com
 wrote:

 Dear R-help list,

 I would like to replace all lower-case letters in a string that are not
 part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

 Any ideas on how I could achieve that?

 Many thanks and best wishes,

 Alrik


 
 Alrik Thiem
 Post-Doctoral Researcher

 Department of Philosophy
 University of Geneva
 Rue de Candolle 2
 CH-1211 Geneva

 +41 76 527 80 83

 http://www.alrik-thiem.net
 http://www.compasss.org

 __
 R-help@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@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Hervé Pagès

Hi Alrik,

With the Biostrings/IRanges infrastructure (Bioconductor packages), you
can do this with:

  library(Biostrings)
  x0 - BString(pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, 
z1)))

  donttouch_words - c(pmin, pmax)

  ## Extract the substrings to modify (target substrings).
  donttouch_regions - reduce(do.call(c, lapply(donttouch_words, 
matchPattern, x0)))

  target_regions - ranges(gaps(donttouch_regions))
  target_substrings - extractAt(x0, target_regions)

  ## Modify them.
  old - paste0(letters, collapse=)
  new - paste0(LETTERS, collapse=)
  target_substrings - chartr(old, new, target_substrings)

  ## Replace in original string.
  x1 - replaceAt(x0, target_regions, target_substrings)

Then:

   x1
57-letter BString instance
  seq: pmin(pmax(pmin(X1, X2), pmin(X3, X4)) == Y, pmax(Z1, Z1))

   as.character(x1)
  [1] pmin(pmax(pmin(X1, X2), pmin(X3, X4)) == Y, pmax(Z1, Z1))

Hope this helps,
H.

On 02/27/2015 02:19 PM, Alrik Thiem wrote:

Dear R-help list,

I would like to replace all lower-case letters in a string that are not part
of certain fixed expressions. For example, I have the string:

pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

Where I would like to replace all lower-case letters that do not belong to
the functions pmin and pmax by 1 - toupper(...) to get

pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

Any ideas on how I could achieve that?

Many thanks and best wishes,

Alrik



Alrik Thiem
Post-Doctoral Researcher

Department of Philosophy
University of Geneva
Rue de Candolle 2
CH-1211 Geneva

+41 76 527 80 83

http://www.alrik-thiem.net
http://www.compasss.org

__
R-help@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.



--
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: hpa...@fredhutch.org
Phone:  (206) 667-5791
Fax:(206) 667-1319

__
R-help@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.


Re: [R] Substring replacement in string

2015-02-28 Thread Alrik Thiem
Dear Gabor,

Many thanks. Works like a charm, but I can't get it to work with

pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

i.e., with strings where there're no integers following the components in the 
pmin/pmax functions. Could this be generalized to handle both cases?

Best wishes,
Alrik

-Ursprüngliche Nachricht-
Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com] 
Gesendet: Samstag, 28. Februar 2015 13:35
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
 I would like to replace all lower-case letters in a string that are not part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))


Assuming x is the input string:

gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))



-- 
Statistics  Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Michael Dewey

Dear Alrik

This may seem a silly suggestion but why not just define new functions 
PMIN and PMAX to call pmin and pmax. Obviously that does not solve your 
problem if it is more general than your example.


On 28/02/2015 13:16, Alrik Thiem wrote:

Dear Gabor,

Many thanks. Works like a charm, but I can't get it to work with

pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

i.e., with strings where there're no integers following the components in the 
pmin/pmax functions. Could this be generalized to handle both cases?

Best wishes,
Alrik

-Ursprüngliche Nachricht-
Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
Gesendet: Samstag, 28. Februar 2015 13:35
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:

I would like to replace all lower-case letters in a string that are not part
of certain fixed expressions. For example, I have the string:

pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

Where I would like to replace all lower-case letters that do not belong to
the functions pmin and pmax by 1 - toupper(...) to get

pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))



Assuming x is the input string:

gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))





--
Michael
http://www.dewey.myzen.co.uk

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Alrik Thiem
Ah, I see what you mean. Thanks for suggesting. I'll try.

-Ursprüngliche Nachricht-
Von: Michael Dewey [mailto:i...@aghmed.fsnet.co.uk] 
Gesendet: Samstag, 28. Februar 2015 17:31
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: AW: [R] Substring replacement in string

Your original problem statement seemed to me to be one of wanting to 
transform all the lower case identifiers to upper except for pmin and 
pmax. My suggestion was not to bother and transform everything and then 
define PMIN and PMAX.

On 28/02/2015 14:34, Alrik Thiem wrote:
 Dear Michael

 I'm not sure how you mean this. Maybe a more general description of my 
 problem is helpful for clarifying.

 What I have to deal with are truth table output functions that always take, 
 for example, the following form:

 Delta - (a*B+a*C*d=Y)*(E+e)

 I.e. these functions will always have the structure (.*.+.*.+...=.)*(.+.), 
 where the dots in the antecedent could be further conjunctions of unspecified 
 complexity. I now need to filter all rows from the truth table that are 
 compatible with this output function. To create the input part of the truth 
 table tt for Delta above, I do:

 library(QCA) # createMatrix() function is part of this package
 Delta.upper - toupper(Delta)
 f.names - unique(unlist(strsplit(Delta.upper, [(*+=)])))
 f.names - f.names[f.names != ]
 tt - data.frame(createMatrix(rep(2, length(f.names
 dimnames(tt) - list(as.character(seq(2^length(f.names))), f.names)
 tt

 tt
 A B C D Y E
 1  0 0 0 0 0 0
 2  0 0 0 0 0 1
 .  . . . . . .
 63 1 1 1 1 1 0
 64 1 1 1 1 1 1

 I now need to transform Delta into a string of the following form in order to 
 extract the subset of compatible rows from tt:

 pmin(pmax(pmin(1-tt$A,tt$B),pmin(1-tt$A,tt$C,1-tt$D))==tt$Y,pmax(tt$E,1-tt$E))==TRUE

 With this string, I can then do:

 tt[pmin(pmax(pmin(1-tt$A,tt$B), 
 pmin(1-tt$A,tt$C,1-tt$D))==tt$Y,pmax(tt$E,1-tt$E))==TRUE, ]
 A B C D Y E
 1  0 0 0 0 0 0
 2  0 0 0 0 0 1
 .  . . . . . .
 61 1 1 1 1 0 0
 62 1 1 1 1 0 1

 -Ursprüngliche Nachricht-
 Von: Michael Dewey [mailto:i...@aghmed.fsnet.co.uk]
 Gesendet: Samstag, 28. Februar 2015 14:50
 An: Alrik Thiem
 Cc: r-help@r-project.org
 Betreff: Re: [R] Substring replacement in string

 Dear Alrik

 This may seem a silly suggestion but why not just define new functions
 PMIN and PMAX to call pmin and pmax. Obviously that does not solve your
 problem if it is more general than your example.

 On 28/02/2015 13:16, Alrik Thiem wrote:
 Dear Gabor,

 Many thanks. Works like a charm, but I can't get it to work with

 pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

 i.e., with strings where there're no integers following the components in 
 the pmin/pmax functions. Could this be generalized to handle both cases?

 Best wishes,
 Alrik

 -Ursprüngliche Nachricht-
 Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Gesendet: Samstag, 28. Februar 2015 13:35
 An: Alrik Thiem
 Cc: r-help@r-project.org
 Betreff: Re: [R] Substring replacement in string

 On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
 I would like to replace all lower-case letters in a string that are not part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))



 Assuming x is the input string:

 gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
 ## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))





-- 
Michael
http://www.dewey.myzen.co.uk

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Alrik Thiem
Dear Gabor,

That works perfectly! 

Many thanks and best wishes,
Alrik

-Ursprüngliche Nachricht-
Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com] 
Gesendet: Samstag, 28. Februar 2015 19:30
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

Replace the + (i.e. 1 or more) in the pattern with a * (i.e. 0 or more):

   x - pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

   gsub((\\b[a-oq-z][a-z0-9]*), 1-\\U\\1, x, perl = TRUE)

giving:

   [1] pmin(pmax(pmin(1-A,B),pmin(1-A,C,1-D))==Y,pmax(E,1-E))

Here is a visualization of the regular expression:

   https://www.debuggex.com/i/5ByOCQS2zIdPEf-f.png


On Sat, Feb 28, 2015 at 8:16 AM, Alrik Thiem alrik.th...@gmail.com wrote:
 Dear Gabor,

 Many thanks. Works like a charm, but I can't get it to work with

 pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

 i.e., with strings where there're no integers following the components in the 
 pmin/pmax functions. Could this be generalized to handle both cases?

 Best wishes,
 Alrik

 -Ursprüngliche Nachricht-
 Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Gesendet: Samstag, 28. Februar 2015 13:35
 An: Alrik Thiem
 Cc: r-help@r-project.org
 Betreff: Re: [R] Substring replacement in string

 On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
 I would like to replace all lower-case letters in a string that are not part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))


 Assuming x is the input string:

 gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
 ## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))



 --
 Statistics  Software Consulting
 GKX Group, GKX Associates Inc.
 tel: 1-877-GKX-GROUP
 email: ggrothendieck at gmail.com




-- 
Statistics  Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Michael Dewey
Your original problem statement seemed to me to be one of wanting to 
transform all the lower case identifiers to upper except for pmin and 
pmax. My suggestion was not to bother and transform everything and then 
define PMIN and PMAX.


On 28/02/2015 14:34, Alrik Thiem wrote:

Dear Michael

I'm not sure how you mean this. Maybe a more general description of my problem 
is helpful for clarifying.

What I have to deal with are truth table output functions that always take, for 
example, the following form:

Delta - (a*B+a*C*d=Y)*(E+e)

I.e. these functions will always have the structure (.*.+.*.+...=.)*(.+.), where the 
dots in the antecedent could be further conjunctions of unspecified complexity. I now need to 
filter all rows from the truth table that are compatible with this output function. To create 
the input part of the truth table tt for Delta above, I do:

library(QCA) # createMatrix() function is part of this package
Delta.upper - toupper(Delta)
f.names - unique(unlist(strsplit(Delta.upper, [(*+=)])))
f.names - f.names[f.names != ]
tt - data.frame(createMatrix(rep(2, length(f.names
dimnames(tt) - list(as.character(seq(2^length(f.names))), f.names)
tt


tt

A B C D Y E
1  0 0 0 0 0 0
2  0 0 0 0 0 1
.  . . . . . .
63 1 1 1 1 1 0
64 1 1 1 1 1 1

I now need to transform Delta into a string of the following form in order to extract the 
subset of compatible rows from tt:

pmin(pmax(pmin(1-tt$A,tt$B),pmin(1-tt$A,tt$C,1-tt$D))==tt$Y,pmax(tt$E,1-tt$E))==TRUE

With this string, I can then do:


tt[pmin(pmax(pmin(1-tt$A,tt$B), 
pmin(1-tt$A,tt$C,1-tt$D))==tt$Y,pmax(tt$E,1-tt$E))==TRUE, ]

A B C D Y E
1  0 0 0 0 0 0
2  0 0 0 0 0 1
.  . . . . . .
61 1 1 1 1 0 0
62 1 1 1 1 0 1

-Ursprüngliche Nachricht-
Von: Michael Dewey [mailto:i...@aghmed.fsnet.co.uk]
Gesendet: Samstag, 28. Februar 2015 14:50
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

Dear Alrik

This may seem a silly suggestion but why not just define new functions
PMIN and PMAX to call pmin and pmax. Obviously that does not solve your
problem if it is more general than your example.

On 28/02/2015 13:16, Alrik Thiem wrote:

Dear Gabor,

Many thanks. Works like a charm, but I can't get it to work with

pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

i.e., with strings where there're no integers following the components in the 
pmin/pmax functions. Could this be generalized to handle both cases?

Best wishes,
Alrik

-Ursprüngliche Nachricht-
Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
Gesendet: Samstag, 28. Februar 2015 13:35
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:

I would like to replace all lower-case letters in a string that are not part
of certain fixed expressions. For example, I have the string:

pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

Where I would like to replace all lower-case letters that do not belong to
the functions pmin and pmax by 1 - toupper(...) to get

pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))






Assuming x is the input string:

gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))







--
Michael
http://www.dewey.myzen.co.uk

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Gabor Grothendieck
Replace the + (i.e. 1 or more) in the pattern with a * (i.e. 0 or more):

   x - pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

   gsub((\\b[a-oq-z][a-z0-9]*), 1-\\U\\1, x, perl = TRUE)

giving:

   [1] pmin(pmax(pmin(1-A,B),pmin(1-A,C,1-D))==Y,pmax(E,1-E))

Here is a visualization of the regular expression:

   https://www.debuggex.com/i/5ByOCQS2zIdPEf-f.png


On Sat, Feb 28, 2015 at 8:16 AM, Alrik Thiem alrik.th...@gmail.com wrote:
 Dear Gabor,

 Many thanks. Works like a charm, but I can't get it to work with

 pmin(pmax(pmin(a,B),pmin(a,C,d))==Y,pmax(E,e))

 i.e., with strings where there're no integers following the components in the 
 pmin/pmax functions. Could this be generalized to handle both cases?

 Best wishes,
 Alrik

 -Ursprüngliche Nachricht-
 Von: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Gesendet: Samstag, 28. Februar 2015 13:35
 An: Alrik Thiem
 Cc: r-help@r-project.org
 Betreff: Re: [R] Substring replacement in string

 On Fri, Feb 27, 2015 at 5:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
 I would like to replace all lower-case letters in a string that are not part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))


 Assuming x is the input string:

 gsub((\\b[a-oq-z][a-z0-9]+), 1-\\U\\1, x, perl = TRUE)
 ## [1] pmin(pmax(pmin(1-X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1-Z1))



 --
 Statistics  Software Consulting
 GKX Group, GKX Associates Inc.
 tel: 1-877-GKX-GROUP
 email: ggrothendieck at gmail.com




-- 
Statistics  Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

__
R-help@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.

Re: [R] Substring replacement in string

2015-02-28 Thread Alrik Thiem
Dear Hervé,

Many thanks for your suggestion. Gabor Grothendieck proposed a simple
one-liner that works perfectly for my purposes:

gsub((\\b[a-oq-z][a-z0-9]*), 1-\\U\\1, x, perl = TRUE)

where x is the respective string.

Best wishes,
Alrik

-Ursprüngliche Nachricht-
Von: Hervé Pagès [mailto:hpa...@fredhutch.org] 
Gesendet: Samstag, 28. Februar 2015 23:29
An: Alrik Thiem; r-help@r-project.org
Betreff: Re: [R] Substring replacement in string

Hi Alrik,

With the Biostrings/IRanges infrastructure (Bioconductor packages), you
can do this with:

   library(Biostrings)
   x0 - BString(pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, 
z1)))
   donttouch_words - c(pmin, pmax)

   ## Extract the substrings to modify (target substrings).
   donttouch_regions - reduce(do.call(c, lapply(donttouch_words, 
matchPattern, x0)))
   target_regions - ranges(gaps(donttouch_regions))
   target_substrings - extractAt(x0, target_regions)

   ## Modify them.
   old - paste0(letters, collapse=)
   new - paste0(LETTERS, collapse=)
   target_substrings - chartr(old, new, target_substrings)

   ## Replace in original string.
   x1 - replaceAt(x0, target_regions, target_substrings)

Then:

x1
 57-letter BString instance
   seq: pmin(pmax(pmin(X1, X2), pmin(X3, X4)) == Y, pmax(Z1, Z1))

as.character(x1)
   [1] pmin(pmax(pmin(X1, X2), pmin(X3, X4)) == Y, pmax(Z1, Z1))

Hope this helps,
H.

On 02/27/2015 02:19 PM, Alrik Thiem wrote:
 Dear R-help list,

 I would like to replace all lower-case letters in a string that are not
part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

 Any ideas on how I could achieve that?

 Many thanks and best wishes,

 Alrik


 
 Alrik Thiem
 Post-Doctoral Researcher

 Department of Philosophy
 University of Geneva
 Rue de Candolle 2
 CH-1211 Geneva

 +41 76 527 80 83

 http://www.alrik-thiem.net
 http://www.compasss.org

 __
 R-help@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.


-- 
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: hpa...@fredhutch.org
Phone:  (206) 667-5791
Fax:(206) 667-1319

__
R-help@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.


Re: [R] Substring replacement in string

2015-02-27 Thread Alrik Thiem
Many thanks. Unfortunately, I cannot work directly on these expressions since 
they’re only created from other strings. Would I first have to transform these 
strings to unevaluated expressions? 
 
Von: William Dunlap [mailto:wdun...@tibco.com] 
Gesendet: Freitag, 27. Februar 2015 23:39
An: Alrik Thiem
Cc: r-help@r-project.org
Betreff: Re: [R] Substring replacement in string
 
If your string will always represent an R expression, you could work with
the expression directly with functions like all.names() and substitute().
 
f - function (expr) 
{
toReplace - setdiff(all.names(expr), c(pmin, pmax))
toReplace - grep(value = TRUE, [a-z], toReplace)
names(toReplace) - toReplace
replacementList - lapply(toReplace, function(name) call(-, 
1, as.name(toupper(name
do.call(substitute, list(expr, replacementList))
}
 
 In - quote(pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1)))
 Desired - quote(pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - 
 Z1)))
 all.equal(Desired, f(In))
[1] TRUE
 
 
 
 


Bill Dunlap
TIBCO Software
wdunlap tibco.com
 
On Fri, Feb 27, 2015 at 2:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:
Dear R-help list,

I would like to replace all lower-case letters in a string that are not part
of certain fixed expressions. For example, I have the string:

pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

Where I would like to replace all lower-case letters that do not belong to
the functions pmin and pmax by 1 - toupper(...) to get

pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

Any ideas on how I could achieve that?

Many thanks and best wishes,

Alrik



Alrik Thiem
Post-Doctoral Researcher

Department of Philosophy
University of Geneva
Rue de Candolle 2
CH-1211 Geneva

+41 76 527 80 83

http://www.alrik-thiem.net
http://www.compasss.org

__
R-help@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@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.

Re: [R] Substring replacement in string

2015-02-27 Thread William Dunlap
If your string will always represent an R expression, you could work with
the expression directly with functions like all.names() and substitute().

f - function (expr)
{
toReplace - setdiff(all.names(expr), c(pmin, pmax))
toReplace - grep(value = TRUE, [a-z], toReplace)
names(toReplace) - toReplace
replacementList - lapply(toReplace, function(name) call(-,
1, as.name(toupper(name
do.call(substitute, list(expr, replacementList))
}

 In - quote(pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1)))
 Desired - quote(pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1,
1 - Z1)))
 all.equal(Desired, f(In))
[1] TRUE





Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Feb 27, 2015 at 2:19 PM, Alrik Thiem alrik.th...@gmail.com wrote:

 Dear R-help list,

 I would like to replace all lower-case letters in a string that are not
 part
 of certain fixed expressions. For example, I have the string:

 pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

 Where I would like to replace all lower-case letters that do not belong to
 the functions pmin and pmax by 1 - toupper(...) to get

 pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

 Any ideas on how I could achieve that?

 Many thanks and best wishes,

 Alrik


 
 Alrik Thiem
 Post-Doctoral Researcher

 Department of Philosophy
 University of Geneva
 Rue de Candolle 2
 CH-1211 Geneva

 +41 76 527 80 83

 http://www.alrik-thiem.net
 http://www.compasss.org

 __
 R-help@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@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] Substring replacement in string

2015-02-27 Thread Alrik Thiem
Dear R-help list,

I would like to replace all lower-case letters in a string that are not part
of certain fixed expressions. For example, I have the string:

pmin(pmax(pmin(x1, X2), pmin(X3, X4)) == Y, pmax(Z1, z1))

Where I would like to replace all lower-case letters that do not belong to
the functions pmin and pmax by 1 - toupper(...) to get

pmin(pmax(pmin(1 - X1, X2), pmin(X3, X4)) == Y, pmax(Z1, 1 - Z1))

Any ideas on how I could achieve that?

Many thanks and best wishes,

Alrik



Alrik Thiem
Post-Doctoral Researcher

Department of Philosophy
University of Geneva
Rue de Candolle 2
CH-1211 Geneva

+41 76 527 80 83

http://www.alrik-thiem.net
http://www.compasss.org

__
R-help@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.