рекомендации

пятница, 17 июля 2020 г.

Четыре способа перевернуть строку в 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)

Комментариев нет:

Отправить комментарий