2017-06-26 11 views
3

におけるforループIは、forループで次の機能を有する:機能を拡張ヘルプが必要とR

getSequences <- function(input.seq){ 
peptide.result <- c() 
for (i in 1:nrow(peptides.df)) { 
    peptide.seq <- substr(input.seq, peptides.df$StartAA[i], peptides.df$EndAA[i]) 
    peptide.info <- data.frame(cbind(peptide.name = peptides.df$Name[i], peptide.seq)) 
    peptide.result <- rbind(peptide.result, peptide.info) 
} 
    return(peptide.result) 
} 

test.results <- getSequences(input.seq) 

関数は、アミノ酸配列を受け取り、次いで開始とこの入力およびペプチドのマトリックスを使用して異なる位置で配列のサブセットを抽出して、ペプチドのセットを生成する。 シーケンス:

例のアミノ酸配列:

Name StartAA EndAA 
peptide_1 25 48 
peptide_2 33 56 
peptide_3 41 64 

電流出力peptide.result:ここ

input.seq <- ("MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE") 

がpeptides.dfの最初の数行は、次のようになります

peptide.name peptide.sequence 
peptide_1 QNYWEHPYQNSDVYRPINEHREHP 
peptide_2 QNSDVYRPINEHREHPKEYEYPLH 
peptide_3 INEHREHPKEYEYPLHQEHTYQQE 

サンプル#とそのデータフレームを持つデータフレームを取得するにはどのように拡張できますかputシーケンス。各サンプル#とそのシーケンスについて、私はこの例のように一連のペプチドを生成したいと思います。

新しい入力:sample_sequences(入力配列と200個のサンプル)でデータフレーム

sample1  MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE 
sample2  MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE 
sample3  MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE 
... 
sample200 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE 

新しい出力:sample_peptides

sample1 peptide_1 QNYWEHPYQNSDVYRPINEHREHP 
sample1 peptide_2 QNSDVYRPINEHREHPKEYEYPLH 
sample1 peptide_3 INEHREHPKEYEYPLHQEHTYQQE 
sample2 peptide_1 QNYWEHPYQNSDVYRPINEHREHP 
sample2 peptide_2 QNSDVYRPINEHREHPKEYEYPLH 
sample2 peptide_3 INEHREHPKEYEYPLHQEHTYQQE 
sample3 peptide_1 QNYWEHPYQNSDVYRPINEHREHP 
sample3 peptide_2 QNSDVYRPINEHREHPKEYEYPLH 
sample3 peptide_3 INEHREHPKEYEYPLHQEHTYQQE 
... 
sample200 peptide_1 QNYWEHPYQNSDVYRPINEHREHP 
sample200 peptide_2 QNSDVYRPINEHREHPKEYEYPLH 
sample200 peptide_3 INEHREHPKEYEYPLHQEHTYQQE 
+0

を使用して、単純なmutateです。 'for(sample_sequences){getSequences()}'、そうですか? –

+1

出力形式は若干異なりますが、 'sapply(df $ sample_sequences、getSequences)'はこれを行うべきです。 –

+0

こんにちは皆さん、ありがとうございます。私は、ユーザーの要件を行うために、問題への私のアプローチを変更してしまった。しかし、私はRのプログラミングを学ぼうとしているので、あなたの提案をそれぞれ使用しています。私の新しいアプローチは、ユーザーが入力した2つの座標(Coord1、Coord2)に基づいて入力シーケンスをサブセット化することです。ライブラリ(dplyr)subset.sample.seq < - sample_sequences%>%mutate(Sequence =サブセット(シーケンス、Coord1、Coord2)) – tkh86

答えて

0

あなたがtidyrdplyrでループを回避することができます。 crossingを使用して、すべての可能なペプチドについてsample_sequencesを展開することができます。その後、それはあなたがちょうどあなたの `getSequences`機能の周りに別のループをしたいハイレベルでsubstr

library(dplyr);library(tidyr) 
peptides.df <- read.table(text=" Name StartAA EndAA 
peptide_1 25 48 
peptide_2 33 56 
peptide_3 41 64",header=TRUE,stringsAsFactors=FALSE) 

sample_sequences <-read.table(text=" sample sequence 
sample1  MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE 
sample2  MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE 
sample3  MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE",header=TRUE,stringsAsFactors=FALSE) 

crossing(sample_sequences,peptides.df)%>% 
    mutate(peptide.sequence=substr(sequence, StartAA, EndAA)) 

    sample               sequence  Name StartAA EndAA   peptide.sequence 
1 sample1 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_1  25 48 QNYWEHPYQNSDVYRPINEHREHP 
2 sample1 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_2  33 56 QNSDVYRPINEHREHPKEYEYPLH 
3 sample1 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_3  41 64 INEHREHPKEYEYPLHQEHTYQQE 
4 sample2 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_1  25 48 QNYWEHPYQNSDVYRPINEHREHP 
5 sample2 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_2  33 56 QNSDVYRPINEHREHPKEYEYPLH 
6 sample2 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_3  41 64 INEHREHPKEYEYPLHQEHTYQQE 
7 sample3 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_1  25 48 QNYWEHPYQNSDVYRPINEHREHP 
8 sample3 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_2  33 56 QNSDVYRPINEHREHPKEYEYPLH 
9 sample3 MRKLYCVLLLSAFEFTYMINFGRGQNYWEHPYQNSDVYRPINEHREHPKEYEYPLHQEHTYQQE peptide_3  41 64 INEHREHPKEYEYPLHQEHTYQQE 
関連する問題