-
Notifications
You must be signed in to change notification settings - Fork 0
/
useful-func.R
79 lines (73 loc) · 1.73 KB
/
useful-func.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# fonctions
# ---------------------------------------
# lit un fichier fasta
# retourne un vecteur de character avec une sequence par element
# chaque element porte le nom de sequence commencant par ">"
readfasta <- function (fname) {
lignes = readLines(fname)
nli=length(lignes)
allseq=c()
seqnum=0
i=1
while (i <=nli) {
l=lignes[i]
if (grepl (">", l)) {
seqnmame=l
s=""
i=i+1
l=lignes[i]
while ((i<=nli) & (!grepl (">", l))) {
s=paste(s,l)
i=i+1
l=lignes[i]
}
s=gsub('\\s','',s)
names(s)=seqnmame
allseq=c(allseq,s)
}else{
i=i+1
}
}
return (allseq)
}
# convertit liste de strings (résultat de readfasta) en tableau de char
string2table <- function (stringvec) {
tabseq<-c()
for (l in stringvec) {
v <- strsplit(l,"") # convertit string en liste
v <- unlist(v) # unlist the result to obtain a vector
tabseq = rbind (tabseq,v) # ajoute le vecteur v a tabseq
}
return(tabseq)
}
# fonction de comptage de chaque lettres d'un vecteur
# ajoute: test pour ignorer les "-"
count <- function (x) {
lettres <- unique (x) # liste des lettres du vecteur x
cnt <- rep (0, length(lettres)) # initialise le vec de comptes
names(cnt) <- lettres
for (i in x) {
if (i != "-") {
cnt[i] <- cnt[i]+1
}
}
return (cnt)
}
# fonction mesurant les frequences des lettres dans un vecteur
# retourne un vecteur de frequences
freq <- function (x){
y <- count(x)
return (y / sum(y))
}
# fonction mesurant l'entropie des lettres dans un vecteur
# retourne une valeur unique d'entropie
entropie <- function (x) {
f <- freq(x)
h=0
for (i in f) {
if (i != 0) {
h=h+i*log2(i)
}
}
return(-h)
}