У меня есть dataframe, содержащий UniProt присоединения к ней и идентификаторы вроде этого:R применяя пользовательскую функцию к каждой строке в столбце
> a <- data.frame(protein=c("sp|A6NCE7|MP3B2_HUMAN,sp|Q9GZQ8|MLP3B_HUMAN","sp|A6NL28|TPM3L_HUMAN","sp|B5ME19|EIFCL_HUMAN,sp|Q99613|EIF3C_HUMAN"),stringsAsFactors=FALSE)
> a
protein
1 sp|A6NCE7|MP3B2_HUMAN,sp|Q9GZQ8|MLP3B_HUMAN
2 sp|A6NL28|TPM3L_HUMAN
3 sp|B5ME19|EIFCL_HUMAN,sp|Q99613|EIF3C_HUMAN
Теперь, я написал функцию для разделения каждой из строк в полезную части:
split.uniprot.string <- function(uniprot_string){
first.protein <- unlist(strsplit(uniprot_string,"[,]"))[1]
uniprot_accession <- unlist(strsplit(first.protein,"[|]"))[2]
uniprot_ID <- unlist(strsplit(first.protein,"[|]"))[3]
list(uniprot_ID=uniprot_ID, uniprot_accession=uniprot_accession)
}
Он отлично работает, если я применяю его к отдельным строкам:
> split.uniprot.string(a$protein[2])
$uniprot_ID
[1] "TPM3L_HUMAN"
$uniprot_accession
[1] "A6NL28"
Однако, если я пытаюсь применить его к каждой строке dataframe, функция как-то применяется только к первой строке правильно (то же самое происходит, если я бегу для цикла по каждой строке):
> a$uniprot_ID <- apply(a,1,function(row) split.uniprot.string(a$protein)$uniprot_ID)
> a
protein uniprot_ID
1 sp|A6NCE7|MP3B2_HUMAN,sp|Q9GZQ8|MLP3B_HUMAN MP3B2_HUMAN
2 sp|A6NL28|TPM3L_HUMAN MP3B2_HUMAN
3 sp|B5ME19|EIFCL_HUMAN,sp|Q99613|EIF3C_HUMAN MP3B2_HUMAN
Что я должен изменить , так что функция заполняет правильный uniprot_ID в каждой строке (т. е. «TPM3L_HUMAN» в строке 2 и «EIF3C_HUMAN» в строке 3)?
'function (row) split.uniprot.string ($ protein) $ uniprot_ID': вы должны изменить' a' на 'row', так как это переменная вашей функции ... (и вы не можете использовать' $ protein 'и т. д. как' row' является 'vector') – Cath
Спасибо! Работает отлично! – Flo
Просто для полноты: в таблице примеров был только один столбец. Если вы применяете функцию более чем к одному столбцу, вам нужно добавить индекс столбца в строку, т. Е. Функцию (строку) split.uniprot.string (строка ['column-index']). – Flo