2

I have a vector that looks like this:

vector <- c("SPN.subset(RELN).geneset1", "Myeloid.svz.geneset1")

I want to replace "SPN.subset(RELN).geneset1" with "SPN.subset(RELN).caudate.geneset1", but it seems the parantheses aren't allowing this to happen:

e.g

> gsub("SPN.subset(RELN).geneset1", "SPN.subset(RELN).caudate.geneset1", vector)
[1] "SPN.subset(RELN).geneset1" "Myeloid.svz.geneset1"  

Any ideas how to fix this?

camille
  • 16,432
  • 18
  • 38
  • 60
Workhorse
  • 1,500
  • 1
  • 17
  • 27

2 Answers2

3

We may match the closing parentheses, followed by the ., andi. nthe replacement, add the ). followed by the caudate substring

sub("\\)\\.", ").caudate.", vector)
[1] "SPN.subset(RELN).caudate.geneset1" "Myeloid.svz.geneset1"         

with gsub/sub, the default option is fixed = FALSE i.e. in regex mode. When it is in regex mode, the () is treated differently i.e. it is a metacharacter to capture group instead of literally evaluating

akrun
  • 874,273
  • 37
  • 540
  • 662
3

We could escape the special characters with \\ in the pattern of gsub: Notice akrun is providing a more general approach!

gsub("SPN.subset\\(RELN\\).geneset1", "SPN.subset(RELN).caudate.geneset1", vector)
[1] "SPN.subset(RELN).caudate.geneset1" "Myeloid.svz.geneset1"    
TarJae
  • 72,363
  • 6
  • 19
  • 66