-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathIntroduction.Rmd
95 lines (69 loc) · 2.4 KB
/
Introduction.Rmd
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
---
title: "Les bases de Rcpp - Introduction"
author: "Timothée Tabouy & Félix Cheysson & Mathieu Carmassi"
date: "20 juillet 2018"
output:
ioslides_presentation:
css: styles.css
widescreen: true
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, cache = TRUE)
```
Pourquoi le C++
====================================
## Pourquoi utiliser C++
En général on utilise du C++ au lieu de R dans les cas suivant :
- boucles non vectorisables où l'itération dépend des précédents (par exemple les MCMC)
- usage de fonctions récursives ou l'appel répété un grand nombre de fois à une fonction
- utilisation de structure de données complexe et non gérée par R
R possède des atouts non négligeables :
- modélisation statistique rapide et facile
- visualisation de donnée élégante
- etc...
## Exemple
Par exemple si on veut exécuter n fois la fonction :
$$ x \mapsto \frac{1}{1+x}$$
```{r example}
f <- function(n, x=1) for (i in 1:n) x=1/(1+x)
g <- function(n, x=1) for (i in 1:n) x=(1/(1+x))
h <- function(n, x=1) for (i in 1:n) x=(1+x)^(-1)
j <- function(n, x=1) for (i in 1:n) x={1/{1+x}}
k <- function(n, x=1) for (i in 1:n) x=1/{1+x}
```
Parmi toute ces écritures laquelle est la plus rapide?
## Impact de l'écriture de la fonction en R
```{r exampleR}
library(rbenchmark)
N <- 1e6
benchmark(f(N,1), g(N,1), h(N,1), j(N,1),k(N,1),columns=c("test", "replications",
"elapsed", "relative"),
order="relative", replications=10)
```
## En C++
```{r exampleCpp}
library(inline)
src <- 'int n = as<int>(ns);
double x = as<double>(xs);
for (int i=0; i<n; i++) x=1/(1+x);
return wrap(x); '
l <- cxxfunction(signature(ns="integer",
xs="numeric"),
body=src, plugin="Rcpp")
```
On reviendra plus tard sur ces lignes..
## Comparaison des performances
```{r comparaison}
N <- 1e6
benchmark(f(N,1), g(N,1), h(N,1), j(N,1),k(N,1),l(N,1),columns=c("test", "replications",
"elapsed", "relative"),
order="relative", replications=10)
```
Plan de la présentation
====================================
## Plan de la présentation
1. Architecture Rcpp
2. Syntaxe C++
3. RcppArmadillo
4. Intégrer des fonctions R dans RcppArmadillo et création rapide d'un package utilisant du C++
5. Astuces de codage