Как я могу дать последовательные имена элементам в списке? - PullRequest
2 голосов
/ 18 июня 2020

У меня есть символьная строка, которую я разбил на список меньших строк с помощью strsplit. Например:

> full.seq <- "FZpcgK3VdAQzEFZpcAVdV8QM8ZpsEFZpacgGKi3VdVSQzEFZpcgGKAVdVRpEFKGIZpg13"
> full.seq
[1] "FZpcgK3VdAQzEFZpcAVdV8QM8ZpsEFZpacgGKi3VdVSQzEFZpcgGKAVdVRpEFKGIZpg13"
> sequences <- strsplit(full.seq, "cg")
> sequences
[[1]]
[1] "FZp"                          "K3VdAQzEFZpcAVdV8QM8ZpsEFZpa" "GKi3VdVSQzEFZp"              
[4] "GKAVdVRpEFKGIZpg13"  

Я хотел бы дать каждой из этих новых строк уникальное последовательное имя, которое я все еще могу использовать, чтобы определить, что они принадлежат к той же исходной строке (для последующего анализа я сделаю на этих струнах). Например, «ID.seq1», «ID.seq2», «ID.seq3» и c. Я пытался сделать это вручную, но получаю следующую ошибку:

> names(sequences) <- c("ID.seq1", "ID.seq2", "ID.seq3", "ID.seq4")
Error in names(sequences) <- c("ID.seq1", "ID.seq2", "ID.seq3", "ID.seq4") : 
  'names' attribute [4] must be the same length as the vector [1]

Я бы также хотел сделать это автоматически, поскольку мне нужно будет пометить до 30 новых строк из ряда исходных строк. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 18 июня 2020

Прежде всего, если вам нужен вектор символов, вам нужно будет разбить список, потому что strsplit возвращает список. После этого вы можете легко присвоить этому вектору терминов имена.

full.seq <- "FZpcgK3VdAQzEFZpcAVdV8QM8ZpsEFZpacgGKi3VdVSQzEFZpcgGKAVdVRpEFKGIZpg13"
sequences <- strsplit(full.seq, "cg")[[1]]
names(sequences) <- paste0("ID.seq", c(1:4))
sequences

         ID.seq1                        ID.seq2 
           "FZp" "K3VdAQzEFZpcAVdV8QM8ZpsEFZpa" 
         ID.seq3                        ID.seq4 
"GKi3VdVSQzEFZp"           "GKAVdVRpEFKGIZpg13" 
1 голос
/ 18 июня 2020

Ответ Тима идеален. Я просто хочу добавить, если вы хотите сохранить свой список и элементы имени для каждого элемента:

full.seq <- "FZpcgK3VdAQzEFZpcAVdV8QM8ZpsEFZpacgGKi3VdVSQzEFZpcgGKAVdVRpEFKGIZpg13"
full.seq
sequences <- strsplit(full.seq, "cg")
names(sequences[[1]]) <- paste("ID.seq",1:4,sep="") 

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...