• Nenhum resultado encontrado

Qu’est-ce qu’une séquence ?

N/A
N/A
Protected

Academic year: 2023

Share "Qu’est-ce qu’une séquence ?"

Copied!
11
0
0

Texto

(1)

Les séquences : listes

Algo & Prog avec R

A. Malapert, B. Martin, M. Pelleau, et J.-P. Roy 2 décembre 2021

Université Côte d’Azur, CNRS, I3S, France firstname.lastname@univ-cotedazur.fr

(2)

Qu’est-ce qu’une séquence ?

Séquence

Une séquence est une suite finie de valeurs numérotées, distinctes ou pas, de n’importe quel type.

Vecteur

Un vecteur est une séquence d’éléments du même type.

> 1:6

[1] 1 2 3 4 5 6

> c(’ foo ’, ’ bar ’) [1] " foo " " bar "

Liste

Une liste est une séquence d’éléments de type quelconque.

> l i s t(1:6 , c(’ foo ’, ’ bar ’) ) [ [ 1 ] ]

[1] 1 2 3 4 5 6 [ [ 2 ] ]

[1] " foo " " bar "

Mutabilité

Les listes et vecteurs sont mutables, i.e. on peut les modifier.

1/9

(3)

De l’utilité des listes . . .

Comment représenter n points de R

2

?

On numérote les points qui appartiendront en fait à F

2

. Liste avec 2 vecteurs de taille n (Version I)

I Le vecteur x contient les abscisses des points.

I Le vecteur y contient les ordonnées des points.

Un carré tourné à 45 degrés

> li < - l i s t(c(-1 , 0 , 1 , 0) , c(0 , -1 , 0 , 1) )

Liste de n vecteurs de taille 2 (Version II)

Chaque vecteur contient l’abscisse et l’ordonnée d’un point.

Un carré tourné à 45 degrés

> li < - l i s t(c(-1 , 0) , c(0 , -1) , c(1 , 0) , c(0 , 1) )

Les listes sont partout !

Les structures de données à plusieurs dimensions sont souvent des listes

décorées.

2/9

(4)

Accès par rang aux éléments d’une liste

Attention aux différences entre vecteurs et listes I La notation indexée par double crochets.

I Les indices commencent à 1.

I R renvoie une erreur quand les indices sont négatifs.

I L’accès par rang devient différent de l’extraction par tranches.

> li < - l i s t(c(-1 , 0) , c(0 , -1) , c(1 , 0) , c(0 , 1) )

> li [ [ 2 ] ] # r e n v o i e un v e c t e u r !

[1] 0 -1

> li [[-2]]

E r r o r in li [[-2]] :

a t t e m p t to s e l e c t m o r e t h a n one e l e m e n t in g e t 1 i n d e x < r e a l

>

> li [[2:3]]

E r r o r in li [[2:3]] : i n d i c e h o r s l i m i t e s

3/9

(5)

Construction d’une nouvelle liste

Construction en extension On utilise surtout la fonction list.

> li < - l i s t(42 , " foo ", TRUE , 1:10)

Concaténation de deux séquences

On peut coller côte à côte (concaténer) deux séquences.

> li1 < - l i s t( 4 2 )

> li2 < - l i s t(" foo ")

Concaténation

> a p p e n d( li1 , li2 ) [ [ 1 ] ]

[1] 42 [ [ 2 ] ] [1] " foo "

Création d’une liste de listes

> l i s t( li1 , li2 ) # cr é a t i o n d ’ u n e l i s t e de l i s t e s [ [ 1 ] ]

[ [ 1 ] ] [ [ 1 ] ] [1] 42 [ [ 2 ] ] [ [ 2 ] ] [ [ 1 ] ]

[1] " foo " 4/9

(6)

Extraction d’une tranche d’une liste

La notation des tranches (slices) est valide pour toute séquence.

I Comme pour les vecteurs, on utilise les crochets simples.

I Le résultat est une liste.

> li < - l i s t(c(-1 , 0) , c(0 , -1) , c(1 , 0) , c(0 , 1) )

Vecteur numérique d’indices Avec duplication.

> li [c(1 ,3 ,3) ] [ [ 1 ] ]

[1] -1 0

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

Vecteur logique d’indices Avec recyclage.

> li [c( TRUE , F A L S E ) ] [ [ 1 ] ]

[1] -1 0

[ [ 2 ] ] [1] 1 0

Comme pour les vecteurs, on peut utiliser les fonctions d’extraction head

et tail.

5/9

(7)

Autres opérations sur les listes

Modification d’une liste

Avec l’opérateur crochet, la méthode append ou les indices négatifs.

> li < - l i s t(c(-1 , 0) , c(0 , -1) , c(1 , 0) , c(0 , 1) )

> li [c(-1 , -3 , -4) ] # s u p p r e s s i o n d ’ é l é m e n t s [ [ 1 ] ]

[1] 0 -1

Arithmétique, conditions et tests vectorisés ?

Non, on procédera d’autres manières, par exemple par itérations.

> li + li

E r r o r in li + li : a r g u m e n t non num é r i q u e p o u r un op é r a t e u r b i n a i r e

> li = = li

E r r o r in li = = li : c o m p a r a i s o n de ces t y p e s non i m p l é m e n t é e

> li & li

E r r o r in li & li :

ces op é r a t i o n s ne s o n t p o s s i b l e s que p o u r des t y p e s num é riques , l o g i q u e s ou c o m p l e x e s

6/9

(8)

Boîte englobante pour un nuage de points

Comment représenter n points de R

2

?

On numérote les points qui appartiendront en fait à F

2

. 1. Liste avec 2 vecteurs de taille n.

I

Le vecteur

x

contient les abscisses points.

I

Le vecteur

y

contient les ordonnées des points.

2. Liste de taille n dont chaque élément est un vecteur de taille 2.

I

Chaque vecteur contient l’abscisse et l’ordonnée d’un point.

Figure 1 –

Qu’est-ce qu’une boîte englobante ? Merci

Wikipedia. 7/9

(9)

Boîte englobante (Version I)

C a l c u l e r B o i t e E n g l o b a n t e < - f u n c t i o n( pts ) {

# # p t s e s t u n e l i s t e a v e c 2 v e c t e u r s r e t u r n(l i s t(

r a n g e( pts [ [ 1 ] ] ) , r a n g e( pts [ [ 2 ] ] ) ) )

}

> pts < - l i s t(c(-1 , 0 , 1 , 0) , c(0 , -1 , 0 , 1) )

> C a l c u l e r B o i t e E n g l o b a n t e ( pts ) [ [ 1 ] ]

[1] -1 1

[ [ 2 ] ]

[1] -1 1

8/9

(10)

Boîte englobante (Version II)

C a l c u l e r B o i t e E n g l o b a n t e < - f u n c t i o n( pts ) {

# # p t s e s t u n e l i s t e de n v e c t e u r s

C a l c u l e r I n t e r v a l l e E n g l o b a n t < - f u n c t i o n( pts , d ) {

# # on r e p r o g r a m m e la f o n c t i o n r a n g e . . . a < - Inf

b < - -Inf f o r( p in pts ) {

i f( p [ d ] < a ) a < - p [ d ] i f( p [ d ] > b ) b < - p [ d ] }

r e t u r n(c( a , b ) ) }

x < - C a l c u l e r I n t e r v a l l e E n g l o b a n t ( pts , 1) y < - C a l c u l e r I n t e r v a l l e E n g l o b a n t ( pts , 2)

# # on m e t en f o r m e le r é s u l t a t r e t u r n(l i s t( x , y ) )

}

9/9

(11)

Questions?

Retrouvez ce cours sur le site web www.i3s.unice.fr/~malapert/R

9/9

Referências

Documentos relacionados

Uma relação que apareceu nas entrevistas foi a comparação ou a presença da prática de balé e/ou dança pela entrevistadas, resultando na subcategoria 3, Relação Entre