Считайте файл fasta в матрицу или вектор для функции MolecularEntropy в R

Я новичок в R, поэтому, пожалуйста, извините мой очень простой вопрос. Я хочу использовать функцию MolecularEntropy: https://www.rdocumentation.org/packages/HDMD/versions/1.2/topics/MolecularEntropy

Я пытался использовать разные функции быстрого чтения из разных пакетов, таких как ape или seqinr. Но никто не работал с функцией MolecularEntropy.

Вот пример моего файла fasta:

>sequence_1
ACCTGC--A
>sequence_2
ACC-GCTTA
>sequence_3
ACCTGCTTG

Функция быстрого чтения, которую я пробовал, не дает ошибок для функции MolecularEntropy, но дает неверные результаты.

Любая помощь приветствуется!! Благодарю вас!


person Xiaoxixi    schedule 28.06.2020    source источник


Ответы (1)


В пакете биокондуктора Biostrings есть функция readDNAStringSet для чтения файлов fasta.

seqs <- Biostrings::readDNAStringSet("seqfile.fasta")

> seqs
DNAStringSet object of length 3:
    width seq                                               names               
[1]     9 ACCTGC--A                                         sequence_1
[2]     9 ACC-GCTTA                                         sequence_2
[3]     9 ACCTGCTTG                                         sequence_3

В документации к функции MolecularEntropy сказано, что она может принимать вектор последовательностей. Вы можете преобразовать вышеуказанный объект биострок в именованный вектор, используя as.character.

seqs <- as.character(seqs)

> seqs
 sequence_1  sequence_2  sequence_3 
"ACCTGC--A" "ACC-GCTTA" "ACCTGCTTG"

В документации не ясно, что функция ожидает от пробелов. Вы можете заменить пробелы тем, что вам нужно, используя функцию str_replace_all из stringr. Хотя эта функция векторизована, она удаляет имена последовательностей из вектора. Вы можете обойти это, используя map_chr из purrr для перебора вектора.

seqs <- purrr::map_chr(seqs, stringr::str_replace_all, "-", " ")

> seqs
 sequence_1  sequence_2  sequence_3 
"ACCTGC  A" "ACC GCTTA" "ACCTGCTTG" 

Если это все еще вызывает проблемы, ответьте с комментарием, и я могу отредактировать сообщение с потенциальными исправлениями.

person rpolicastro    schedule 29.06.2020
comment
хороший ответ .. OP, по-видимому, нуждается в нем для функции MolecularEntropy(), поэтому, честно говоря, это не работает, если вы преобразуете приведенное выше в виде матрицы, - person StupidWolf; 29.06.2020
comment
Кроме того, stringr::str_replace_all или gsub() работают с вектором. тебе не нужна часть мурлыканья - person StupidWolf; 29.06.2020
comment
Я упомянул об этом в ответе, но функция stringr удаляет имена из именованного вектора. Поскольку производительность, вероятно, не является проблемой, я обошел ее с помощью карты, но я полагаю, что вы могли бы просто сохранить имена в переменной и добавить их позже. Мне любопытно, знает ли кто-нибудь лучший способ сохранить имена. - person rpolicastro; 29.06.2020