Module R’Stat1 : Rappels (4/4)

Novembre 2019 ; IRD-Montpellier-France

CC BY-NC-ND 3.0

Rappels : un peu d’algorithmique

Conditions avec if

Conditions avec if

SI [cela] ALORS [cela] SINON [cela]

Conditions avec if

## [1] "myVar < 3"

Conditions avec if

## [1] "myVar: logical"

Conditions avec if

if n’évalue que le premier élément :

## Warning in if (prueba == TRUE) {: la condition a une longueur > 1 et seul
## le premier élément est utilisé
## [1] "vrai"

Conditions avec if

if n’évalue que le premier élément :

## [1] "vrai (1)"

Conditions avec if

Conditions avec if

Conditions avec if

## [1] "vrai"

& y &&

& : toutes les conditions

&& : la première condition et les suivantes si la première est vraie.

## [1] "Numéro < 10"

& y &&

## Error in miNumero * 10: argument non numérique pour un opérateur binaire

& y &&

Boucles for

Boucles for

##       rep01     rep02
## 1  9.922518  9.388914
## 2  9.763272 10.363430
## 3 10.126622  8.706250
## 4 10.532272  8.633082
## 5 11.226414  9.911668
## 6  9.576858 11.637517

Boucles for

## [1] 0.5336036
## [1] -0.6001578
## [1] 1.420372
## [1] 1.89919
## [1] 1.314747

Boucles for

## [1] "voyelle a en position: 1"
## [1] "voyelle e en position: 5"
## [1] "voyelle i en position: 9"
## [1] "voyelle o en position: 15"
## [1] "voyelle u en position: 21"
## [1] "voyelle y en position: 25"

Boucles for et R

R ne gère pas bien les boucles for. Nous verrons plus tard comment utiliser des alternatives. En attendant, lorsque cela est possible, le travail avec des vecteurs devrait être préféré.

La plupart des exemples que l’on peut trouver sur Internet à propos de la boucle for peuvent être remplacés par des opérations vectorielles.

Boucles for

## [1] 0.5336036
## [1] -0.6001578
## [1] 1.420372
## [1] 1.89919
## [1] 1.314747
## [1]  0.5336036 -0.6001578  1.4203723  1.8991897  1.3147469 -2.0606591

Boucles for

## [1] "voyelle a en position: 1"
## [1] "voyelle e en position: 5"
## [1] "voyelle i en position: 9"
## [1] "voyelle o en position: 15"
## [1] "voyelle u en position: 21"
## [1] "voyelle y en position: 25"
## [1]  1  5  9 15 21 25

Boucles for

## [1] 15
## [1] 15

Boucles for

##  [1]   1   4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289
## [18] 324 361 400
##  [1]   1   4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289
## [18] 324 361 400

Boucles for

## [1] 3.532
## [1] 3.55

Boucles for

C’est un bon exercice que d’explorer les nombreux exemples disponibles sur Internet sur la boucle for et d’essayer de les convertir en opérations vectorielles. Cela nous permet d’acquérir de bons réflexes de programmation avec R.

En conclusion, il est recommandé de ne pas utiliser la boucle for avec R aussi souvent que possible. Dans ce cours, nous verrons des alternatives telles que les boucles de la famille apply.

Boucles while

## [1] 0
## [1] 1
## [1] 2
## [1] 3

Boucles while

## [1] "Mon numéro secret: 3312"
## [1] "L'essai de l'ordinateur: 1871"

Boucles while

## [1] "2019-10-03 16:15:22 CEST"

Boucles while

## Time difference of 0.0499711 secs

Boucles while

## [1] 10847

Boucles while

## [1] 1000

Boucles while

## [1] "Numéro trouvé après 1785 essais."
## [1] "Et il me reste plein de temps : 1.89 sec"

Boucles de la famille apply

apply

##               [,1]        [,2]       [,3]         [,4]       [,5]
##  [1,] -0.765678500 -0.67369120 -2.1656093 -0.006290591  0.1578879
##  [2,] -0.392481315  0.01624043  1.6515738 -0.963538630  0.5536493
##  [3,]  0.050797999  0.60440895  1.5157684  1.012658241  1.6332417
##  [4,]  0.517874266 -1.64967892 -0.6950825 -0.514417550  0.3131771
##  [5,]  1.295112262  1.27512866  2.5339502 -0.345414096 -0.4773363
##  [6,]  1.201171895 -0.80655164  0.7211207 -1.168795153  0.3637982
##  [7,] -0.004658158 -0.81436182  1.1036037 -1.476007842 -0.7272571
##  [8,]  0.117754340 -1.21829151  0.7102438  1.934248526 -0.6153481
##  [9,] -1.095758521 -1.49092506  0.2937126 -1.123399259 -0.6011720
## [10,]  0.587269667  0.52809171  0.4336630  0.714323346 -0.4448704
##             [,6]       [,7]       [,8]        [,9]      [,10]        [,11]
##  [1,] -0.1574574  1.7784757 -0.1362339  0.75346327 -0.5188087  0.379799300
##  [2,]  0.1286711  0.8491819 -0.5670995 -0.31280233  1.6058993  0.041667907
##  [3,] -1.2179146  0.4523584 -1.1252471  0.70388775 -1.0472165 -0.659861566
##  [4,] -0.2030493 -0.7501731  0.7651803 -0.02734863 -0.3728239 -1.400915096
##  [5,]  0.1887325  0.0630280 -0.6035940  1.51503999  0.1022236  0.990118997
##  [6,] -1.2284861  0.8244039  1.3275261  0.84106130  0.1510321  0.168100668
##  [7,]  2.3881911 -0.1611549 -1.4104148 -0.78079191 -1.2320332  1.327540323
##  [8,] -0.2757716 -0.1168048 -1.1365590 -0.28303457  0.1817849  0.008151492
##  [9,] -0.7241912 -0.9991460 -1.5432550  0.87940636 -1.7245476 -0.076629050
## [10,] -1.8983092 -0.5911624  1.6922503  2.14439203  0.4030103 -0.470514376
##             [,12]        [,13]      [,14]      [,15]       [,16]
##  [1,]  1.86542390  1.046097706 -1.2843759  0.8939038 -1.32859019
##  [2,]  1.40851593 -0.079016567 -2.0847531 -0.5431741  0.05104308
##  [3,] -0.01385535 -0.577284663 -1.7228953 -1.0930826 -2.82631951
##  [4,] -0.24578302 -0.010910824  0.1357681  0.5614728  1.55610358
##  [5,] -0.61463797 -0.002600124 -1.5249794 -2.0696044 -0.13120837
##  [6,]  0.86803670  1.522387139 -1.7154698  0.8565833  0.77852380
##  [7,] -0.11475724  0.365898865  0.1306034 -0.6092724  0.28181046
##  [8,] -0.83369511 -0.558669553 -1.0729783  0.3123619  0.89396039
##  [9,] -1.27760457 -1.556003195 -1.0507980  1.1042818 -1.20453715
## [10,] -0.40005256 -0.046484226 -0.5760199  1.1692328  1.13748702
##             [,17]       [,18]       [,19]       [,20]
##  [1,] -1.38041557 -0.07225535  0.41898974 -0.65687164
##  [2,] -1.22895307  0.80843674  0.68172164 -0.38983164
##  [3,]  1.56493549  0.71618580 -0.59873907  0.23565858
##  [4,] -0.12088403 -0.17318792  1.10457733 -0.59570054
##  [5,] -1.07026165  1.79788113 -2.28665727  0.07266582
##  [6,] -0.59019201 -0.82027620  0.19608490  0.39040894
##  [7,] -1.71876526  0.25478796 -0.04988575 -0.47316937
##  [8,]  0.08164515  0.25683796  0.15376291  0.43720245
##  [9,] -0.08203487  0.96380955  1.29691220  1.69710576
## [10,]  1.72451115 -1.69836501 -1.05249190 -0.23394655

apply

##  [1]  0.15114039 -0.42296304  0.61029443 -0.19366330  0.01557701
##  [6] -0.29995847  0.13490067 -0.27374466  0.54332733 -0.24514797
## [11]  0.03074586  0.06415907  0.01034146 -1.07658982  0.05827029
## [16] -0.07917269 -0.28204147  0.20338547 -0.01357253  0.04835218

apply

##  [1] -0.10424461  0.02895417  0.01847133 -0.14703597  0.03021394
##  [6]  0.37710357 -0.13795608  0.04489832 -0.86166861  0.17826304

apply

##  [1] 10.0   NA  9.3  9.8   NA   NA  9.0  7.0 12.8   NA  9.2   NA 15.3   NA
## [15] 12.3   NA 11.2   NA   NA  6.3

apply

##  [1] 10.000000  6.125000  9.300000  9.800000 11.000000 11.666667  9.000000
##  [8]  7.000000 12.800000  9.666667  9.200000  9.888889 15.300000 10.666667
## [15] 12.300000 12.333333 11.200000 12.875000 11.333333  6.300000

apply

##  [1] 10.000000  6.125000  9.300000  9.800000 11.000000 11.666667  9.000000
##  [8]  7.000000 12.800000  9.666667  9.200000  9.888889 15.300000 10.666667
## [15] 12.300000 12.333333 11.200000 12.875000 11.333333  6.300000

lapply

## $a
##  [1] 71 13 91 32  1 79 73  6 46 84
## 
## $b
##  [1] 13 84  6 46 15 80  1 32 30 69
## 
## $c
##  [1] 52 79 31 87 86 46 11 12 62 60
## 
## $d
##  [1]  67  79  86  26  81  70 100  75  47   9
## 
## $e
##  [1] 82 48 74 62 85 57 44 43 80 16

lapply

## $a
## [1] 49.6
## 
## $b
## [1] 37.6
## 
## $c
## [1] 52.6
## 
## $d
## [1] 64
## 
## $e
## [1] 59.1

lapply

## $a
##  [1] NA  3  2  1 NA  5  4  5  1  3
## 
## $b
##  [1]  5  3 NA NA  1 NA  3  1 NA  1
## 
## $c
##  [1]  1  3 NA  2  1  2  2  3 NA NA
## 
## $d
##  [1]  4 NA  1  3  5  3  1  5  3  1
## 
## $e
##  [1]  3  2  5  5  5  4  3  3 NA  2

lapply

## $a
## [1] NA
## 
## $b
## [1] NA
## 
## $c
## [1] NA
## 
## $d
## [1] NA
## 
## $e
## [1] NA

lapply

## $a
## [1] 3
## 
## $b
## [1] 2.333333
## 
## $c
## [1] 2
## 
## $d
## [1] 2.888889
## 
## $e
## [1] 3.555556

lapply

## $a
## [1] 3
## 
## $b
## [1] 2.333333
## 
## $c
## [1] 2
## 
## $d
## [1] 2.888889
## 
## $e
## [1] 3.555556

lapply

## $a
## [1] "petit"
## 
## $b
## [1] "petit"
## 
## $c
## [1] "petit"
## 
## $d
## [1] "petit"
## 
## $e
## [1] "grand"

lapply

Nombre de données manquantes

## $a
## [1] 2
## 
## $b
## [1] 4
## 
## $c
## [1] 3
## 
## $d
## [1] 1
## 
## $e
## [1] 1

sapply

## $a
## [1] 2
## 
## $b
## [1] 4
## 
## $c
## [1] 3
## 
## $d
## [1] 1
## 
## $e
## [1] 1

sapply

## a b c d e 
## 2 4 3 1 1

sapply

##  a  b  c  d  e 
##  3  3  3 NA  2

sapply

##     a  b  c d  e
## 1  NA  4  3 4  4
## 2   1  2  4 3  5
## 3  NA  4  3 2  5
## 4   3  4 NA 2  5
## 5   3  1 NA 2  3
## 6   5 NA  1 4  3
## 7   2  4  5 2 NA
## 8   1  2  1 1 NA
## 9   4  4  3 4 NA
## 10  2  5  2 5  2

sapply

## a b c d e 
## 2 1 2 0 3

sapply

sapply

tapply

##    col0      col1      col2     col3
## 1     D  9.342874 45293.746 25.35815
## 2     A  9.751796 12577.267 15.64159
## 3     E 10.540578 11141.242 28.58087
## 4     B  9.534572 27562.190 14.32539
## 5     E 10.570737  9522.016 28.08649
## 6     A  9.441922 34658.559 19.85533
## 7     A 10.506382 24397.736 14.96653
## 8     A 10.109506 12841.923 21.42310
## 9     B 10.516283 22761.873 14.01590
## 10    B  9.487621 21817.316 27.89437

tapply

## $A
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.879   9.699  10.057  10.048  10.409  11.406 
## 
## $B
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.495   9.639  10.031   9.994  10.367  11.594 
## 
## $C
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.281   9.692  10.029  10.021  10.363  11.219 
## 
## $D
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.419   9.733  10.084  10.051  10.410  11.342 
## 
## $E
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.961   9.624  10.007  10.013  10.342  11.505

tapply

##        [,1]     [,2]     [,3]
## A 10.048172 24646.62 19.86288
## B  9.993861 24899.61 18.95589
## C 10.021235 24542.52 19.82570
## D 10.051203 25866.84 20.15909
## E 10.012768 25846.31 20.64797

Rappels : écrire une fonction

Fonction

## [1] 5

SUIVANT