Оригинал: Four ways to reverse a string in R
R предлагает несколько способов перевернуть строку, включая несколько вариантов в base R. Мы рассмотрим некоторые из них в этом посте. Мы также сравним время вычислений для каждого метода.
Переворот последовательности может быть особенно полезен в биоинформатике (например, обнаружение обратного комплимента цепи ДНК). Для начала давайте сгенерируем случайную строку из 10 миллионов оснований ДНК (мы можем сделать это и с пакетом stringi, но для наших целей давайте просто воспользуемся функциями base R).
set.seed(1) dna <- paste(sample(c("A", "T", "C", "G"), 10000000, replace = T), collapse = "")
1) Base R, strsplit и paste
Один из способов перевернуть строку - использовать strsplit с paste. Это самый медленный метод, но он выполняет свою работу без каких-либо пакетов. В этом примере мы используем strsplit, чтобы разбить строку на вектор отдельных символов. Затем мы обращаем этот вектор, используя rev. Наконец, мы объединяем вектор символов в строку, используя paste.
start <- proc.time() splits <- strsplit(dna, "")[[1]] reversed <- rev(splits) final_result <- paste(reversed, collapse = "") end <- proc.time() print(end - start)
2) Base R: использование магии utf8
Этот пример также не требует никаких внешних пакетов. В этом методе мы можем использовать встроенную функцию R utf8ToInt для преобразования нашей строки ДНК в вектор целых чисел. Затем мы обращаем этот вектор с помощью функции rev. Наконец, мы конвертируем этот обратный вектор целых чисел обратно в его исходную кодировку - за исключением того, что теперь строка обратная.
start <- proc.time() final_result <- intToUtf8(rev(utf8ToInt(dna))) end <- proc.time() print(end - start)
3) Пакет stringi
Из всех представленных примеров этот вариант является самым быстрым при тестировании. Здесь мы используем функцию stri_reverse из пакета stringi.
library(stringi) start <- proc.time() final_result <- stri_reverse(dna) end <- proc.time() print(end - start)
4) Пакет Biostrings
В нашем последнем примере используется пакет Biostrings, который содержит набор функций, полезных для работы с данными ДНК. Одна его функция, называемая str_rev, может инвертировать строки. Вы можете скачать и загрузить пакет Biostrings следующим образом:
source("http://bioconductor.org/biocLite.R") biocLite("Biostrings") library(Biostrings)
Далее все, что нам нужно сделать, это ввести нашу строку ДНК в функцию str_rev, и мы получим наш результат.
start <- proc.time() final_result <- str_rev(dna) end <- proc.time() print(end - start)
Комментариев нет:
Отправить комментарий