Skip to content
Snippets Groups Projects
vector.Rmd 6.52 KiB
Newer Older
---
title: "Vector"
author: "ronchieri"
date: "22 febbraio 2017"
output:
  pdf_document: default
  html_document: default
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, comment ="")

library(pander)
## Operazioni supportate dai vettori
Operazione |	Descrizione 
-----------|-------------
x + y      | addizione
x - y      | sottrazione	
x * y      | moltiplicazione
x / y      | divisione
x ^ y      | esponente	
x %% y     | modulo
x %/% y    | divisione tra interi
x == y     | test di uguaglianza 
x <= y     | test di minore o uguale
x >= y     | test di maggiore o uguale
x && y     | booleano AND per scalari 	
x & y 	   | booleano AND per vettori 	  	 
x \|\| y     | booleano OR per scalari 	
x \|\| y     | booleano OR per vettori 	  	 
!x  	     | boolean not 	

## Creare e modificare i vettori

#### 1. Creare i vettori `v1` e `v2`

```{r}
v1 <- c(2, 4 ,7)  
v2 <- c(1, 5, 11)  
```

#### 2. Determinare il numero di elementi nel vettore `v1`

```{r, eval=FALSE}
length(v1)  
```

#### 3. Determinare il numero di elementi della operazione `v1 + v2`

```{r, eval=FALSE}
length(v1 + v2)  
```

#### 4. Calcolare la somma degli elementi di `v1`

```{r, eval=FALSE}
sum(v1)  
```

#### 5. Calcolare la somma di `v2 * v2`

```{r, eval=FALSE}
sum(v2 * v2)  
```

#### 6. Calcolare la somma tra `v1` e `v2`

```{r, eval=FALSE}
#### 7. Assegnare al vettore `v3` il risultato della operazione `v1 * 2`, determinandone il numero di elementi
```{r, eval=FALSE}
#### 8. Assegnare il valore medio di `v3` ad un nuovo vettore `v3.mean` determinandone la lunghezza
```{r, eval=FALSE}
v3.mean <- mean(v3)
length(v3.mean)
```

#### 9. Creare un vettore (numerico) `v4` di soli interi con valori da 1 a 50
```{r,eval=FALSE}
#### 10. Creare un vettore (numerico) `v5` della stessa lunghezza di `v4` ma contenente il solo numero 3
```{r,eval=FALSE}
v5 <- rep(3, length(v4))
v5
```

#### 11. Creare un vettore (numerico) `v6` che contenga i numeri da 1 a 10, dove ciascun numero e' ripetuto un numero di volte uguale al numero stesso (per esempio, 1, 2, 2, 3, 3, 3, ...)
```{r,eval=FALSE}
v6 <- rep(1:10, 1:10)
v6
```

#### 12. Determinare in quale caso si applica la regola del riciclo

```{r, eval=FALSE}
c(1, 3, 5) + c(2, 4, 6)
c(1, 3, 5) + c(2, 4, 6, 8)
c(2, 4, 6 ,8) - c(1, 3)
```

#### 13. Creare due vettori di 4 elementi ed eseguire le operazioni base riassunte nella tabella iniziale


## Accedere agli elementi dei vettori

#### 1. Creare un vettore di caratteri contenente i primi [10 laptop brand](https://www.atulhost.com/best-laptop-brands): apple, asus, dell, hp, lenovo, acer, microsoft, samsung, toshiba, msi  

```{r, eval=FALSE}
laptop <- c("apple", "asus", "dell", "hp", 
            "lenovo", "acer", "microsoft", 
            "samsung", "toshiba", "msi")
```

#### 2. Selezionare `toshiba` dal vettore `laptop` 

Soluzione 1
```{r, eval=FALSE}
laptop[9]
```

Soluzione 2
```{r, eval=FALSE}
laptop[which(laptop=="toshiba")]
```

#### 3. Selezionare tutti gli elementi del vettore

```{r, eval=FALSE}
laptop[1:length(laptop)]
```

#### 4. Selezionare i brand `asus`, `hp`, `dell` e `msi` dal vettore `laptop`

```{r, eval=FALSE}
laptop[laptop=="apple" | laptop=="asus" | laptop=="dell" | laptop=="msi"]
```

#### 5. Selezionare tutti i brand tranne `apple` dal vettore `laptop`

Soluzione 1
```{r, eval=FALSE}
laptop[laptop!="apple"]
```

Soluzione 2
```{r, eval=FALSE}
laptop[-1]
```

#### 6. Convertire il vettore di caratteri `laptop` in un vettore numerico
```{r, eval=FALSE}
as.numeric(laptop)
```

#### 7. Creare un vettore di valori logici che puo' essere usato per estrarre dal vettore di caratteri `laptop` i valori nelle posizioni multiple di 2

```{r, eval=FALSE}
estrai <- c(F,T,F,T,F,T,F,T,F,T)
laptop[estrai]
```

#### 8. Creare un vettore contenente tutte le lettere maiuscole dell'alfabeto

```{r, eval=FALSE}
LETTERS
```

#### 9. Partendo dal vettore `LETTERS`, creare un campione di 30 elementi. convertendo gli elementi in factor, determinandone i livelli e quelli con frequenza maggiore


```{r, results='hide'}
LETTERE.campione <- sample(LETTERS, 
                           size=30, 
                           replace = TRUE)
LETTERE.campione <- factor(LETTERE.campione)
cat(paste("I livelli sono ",
          nlevels(LETTERE.campione), 
          "con la seguente frequenza:", 
          sep=" "))

library(pander)
pander(summary(LETTERE.campione))

LETTERE.livellomassimo<-max(sapply(
  summary(LETTERE.campione),max)
  )

cat(paste("Mentre i livelli con frequenza maggiore (", 
          LETTERE.livellomassimo, 
          ") risultano: "))

pander(which(
  summary(LETTERE.campione)==LETTERE.livellomassimo)
  )
```


```{r, echo=FALSE}
LETTERE.campione <- sample(LETTERS, size=30, replace = TRUE)
LETTERE.campione <- factor(LETTERE.campione)
cat(paste("I livelli sono ",
          nlevels(LETTERE.campione), 
          "con la seguente frequenza:", 
          sep=" "))

pander(summary(LETTERE.campione))

LETTERE.livellomassimo<-max(sapply(
  summary(LETTERE.campione),max)
  )

cat(paste("Mentre i livelli con frequenza maggiore (", 
          LETTERE.livellomassimo, 
          ") risultano: "))

pander(which(
  summary(LETTERE.campione)==LETTERE.livellomassimo)
  )
```

#### 10. Estrarre dal vettore `LETTERE.campione` le lettere dalla posizione 10 alla 20

```{r, eval=FALSE}
LETTERE.campione[10:20]
```


#### 11. Estrarre dal vettore `LETTERE.campione` tutte le lettere tranne l'ultima.

Soluzione 1
```{r, eval=FALSE}
LETTERE.campione[1:length(LETTERE.campione)-1]  
```

Soluzione 2
```{r, eval=FALSE}
LETTERE.campione[-length(LETTERE.campione)]  
```


#### 12. Determinare la posizione della lettera `E` nel vettore `LETTERE.campione`

```{r, eval=FALSE}
if isTRUE(LETTERE.campione=='E')
which(LETTERE.campione=='E')
```

#### 13. Compattare gli elementi del vettore `LETTERE.campione`

```{r, eval=FALSE}
paste(LETTERE.campione, sep = "", collapse = "")  
```

#### 14. Costruire una sequenza di stringhe a partire da una replica di stringhe di valore `infn`, in modo tale  da ottenere: `bo.infn.it`, `cnaf.infn.it`, `fe.infn.it`, etc

```{r}
ente <- rep("infn", 35)
sedi <- c('to', 'lnf', 'mi', 'mib', 'pv', 
          'ud','ts',
          'pd', 'lnl', 'tn', 
          'bo', 'cnaf','pr', 'fe', 
          'ge', 
          'fi', 'pi', 'unisi', 
          'lngs', 'aquila', 'pg', 
          'roma1', 'roma2', 'roma3', 'iss', 'lnf',
          'le', 'ba', 
          'cs', 'na', 'sa', 
          'ct', 'lns', 'ms', 
          'ca')
dominio <- paste(sedi,ente,'it',sep='.')
pander(head(sort(dominio), n=length(dominio)))