1

Rで次のマトリックスを作成しました。

positions = cbind(seq(from = 20, to = 68, by = 4),seq(from = 22, to = 70, by = 4))

次の文字列もあります。

"SEQRES   1 L   36  THR PHE GLY SER GLY GLU ALA ASP CYS GLY LEU ARG PRO          "

apply関数を使用して、最初のインデックスがpositions [、1]から取得され、2番目のインデックスがpositions [、2]から取得されるサブストリング(mystring、start.position、end.position)のリストを作成しようとしています。これはforループで簡単に実行できますが、applyの方が高速だと思います。

私はそれを次のように機能させることができますが、よりクリーンな方法があるかどうか疑問に思っています:

parse.me = cbind(seq(from = 20, to = 68, by = 4),seq(from = 22, to = 70, by = 4), input)
apply(parse.me, MARGIN = 1, get.AA.seqres)

get.AA.seqres <- function(items){
start.position = as.numeric(items[1])
end.position = as.numeric(items[2])
string = items[3]
return (substr(string, start.position, end.position)  )
}
4

2 に答える 2

3

これを試して:

> substring(input, positions[, 1], positions[, 2])
 [1] "THR" "PHE" "GLY" "SER" "GLY" "GLU" "ALA" "ASP" "CYS" "GLY" "LEU" "ARG" "PRO"
于 2012-05-28T18:29:49.660 に答える
0

アンドリーの実践的なアドバイスが好きですが、他の理由でこのルートに行く必要がある場合は、次の方法で問題に対処できるようVectorize()です。

#Your data
positions = cbind(seq(from = 20, to = 68, by = 4),seq(from = 22, to = 70, by = 4))
input <- "SEQRES   1 L   36  THR PHE GLY SER GLY GLU ALA ASP CYS GLY LEU ARG PRO          "

#Vectorize the function substr()
vsubstr <- Vectorize(substr, USE.NAMES = FALSE)
vsubstr(input, positions[,1], positions[,2])
#-----
[1] "THR" "PHE" "GLY" "SER" "GLY" "GLU" "ALA" "ASP" "CYS" "GLY" "LEU" "ARG" "PRO"

#Or, read the help page on ?substr about the bit for recycling in the first paragraph of details

substr(rep(input, nrow(positions)), positions[,1], positions[,2])
#-----
[1] "THR" "PHE" "GLY" "SER" "GLY" "GLU" "ALA" "ASP" "CYS" "GLY" "LEU" "ARG" "PRO"
于 2012-05-28T18:07:09.050 に答える