strsplit с вертикальной полосой (трубой)

Здесь,

> r<-c("AAandBB", "BBandCC")
> strsplit(as.character(r),'and')
[[1]]
[1] "AA" "BB"

[[2]]
[1] "BB" "CC"

Работает хорошо, но

> r<-c("AA|andBB", "BB|andCC")
> strsplit(as.character(r),'|and')
[[1]]
[1] "A" "A" "|" ""  "B" "B"

[[2]]
[1] "B" "B" "|" ""  "C" "C"

Здесь ответ неверный. Как получить «AA» и «BB», когда я использую «|и»?
Заранее спасибо.


person ramesh    schedule 21.04.2014    source источник
comment
Нет необходимости использовать as.character() в функции strsplit. :)   -  person bartektartanus    schedule 21.04.2014
comment
возможный дубликат character | в R   -  person RockScience    schedule 22.04.2014
comment
@RockScience: хорошее предложение :)   -  person ramesh    schedule 22.04.2014
comment
нашел этот вопрос, потому что я пытался разделить на "\|", что привело к ошибке, '\|' is an unrecognized escape.... Мне просто нужно было добавить вторую обратную косую черту "\\|", как указано @RockScience. Спасибо!!   -  person flies    schedule 11.03.2016


Ответы (1)


Как вы можете прочитать в ?strsplit, аргумент split в функции strsplit является регулярным выражением. Следовательно, либо вам нужно избежать вертикальной черты (это специальный символ)

strsplit(r,split='\\|and')

или вы можете выбрать fixed=TRUE, чтобы указать, что разделение не является регулярным выражением.

strsplit(r,split='|and',fixed=TRUE)
person RockScience    schedule 21.04.2014