понедельник, 3 июня 2013 г.

Конкатенация строк в R

Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/string-concatenation/.


Давайте поговорим о конкатенации строк. Новички в R пытаются пробовать стандартную конструкцию
"a" + "b"
Но их постигает неудача — R так не работает. Оператор плюс — это арифметическая операция, её нельзя применять к строкам. В R полагается использовать функцию paste:
paste (..., sep = " ", collapse = NULL)
paste0(..., collapse = NULL)
Функция paste соединяет строки, разделяя их некоторым сепаратором sep (который по умолчанию равен пробелу), а paste0 — это её аналог с пустым оператором. Поясним примером:
paste("a", "b", "c") # "a b c"
paste0("a", "b", "c") # "abc"
Такой способ является стандартным, но многим он не по душе. Хочется иметь какой-нибудь бинарный оператор. Но ведь не обязательно это должен быть плюс (например, в PHP для конкатенации строк используется точка). Но давайте будем придерживаться R-стилистики и создадим свой оператор "%+%", который будет складывать строки. Сделать это очень просто:
"%+%" <- function(...){
  paste0(...)
}
Теперь мы можем складывать строки, используя наш новый бинарный оператор:
"a" %+% "b" %+% "c" # "abc"
Кроме того, этот оператор будет прекрасно работать и с векторами в лучших традициях R:
"a" %+% "b" %+% 1:3 # "ab1" "ab2" "ab3"
Идея взята из поста A handy concatenation operator.