Skip to content
Snippets Groups Projects
vector.Rmd 6.52 KiB
title: "Vector"
author: "ronchieri"
date: "22 febbraio 2017"
output:
  pdf_document: default
  html_document: default
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

v1 <- c(2, 4 ,7)  
v2 <- c(1, 5, 11)  

2. Determinare il numero di elementi nel vettore v1

length(v1)  

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

length(v1 + v2)  

4. Calcolare la somma degli elementi di v1

sum(v1)  

5. Calcolare la somma di v2 * v2

sum(v2 * v2)  

6. Calcolare la somma tra v1 e v2

v1 + v2

7. Assegnare al vettore v3 il risultato della operazione v1 * 2, determinandone il numero di elementi

v3 <- v1 * 2
length(v3)

8. Assegnare il valore medio di v3 ad un nuovo vettore v3.mean determinandone la lunghezza

v3.mean <- mean(v3)
length(v3.mean)

9. Creare un vettore (numerico) v4 di soli interi con valori da 1 a 50

v4 <- 1:50
v4

10. Creare un vettore (numerico) v5 della stessa lunghezza di v4 ma contenente il solo numero 3

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, ...)

v6 <- rep(1:10, 1:10)
v6

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

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: apple, asus, dell, hp, lenovo, acer, microsoft, samsung, toshiba, msi

laptop <- c("apple", "asus", "dell", "hp", 
            "lenovo", "acer", "microsoft", 
            "samsung", "toshiba", "msi")

2. Selezionare toshiba dal vettore laptop

Soluzione 1

laptop[9]

Soluzione 2

laptop[which(laptop=="toshiba")]

3. Selezionare tutti gli elementi del vettore

laptop[1:length(laptop)]

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

laptop[laptop=="apple" | laptop=="asus" | laptop=="dell" | laptop=="msi"]

5. Selezionare tutti i brand tranne apple dal vettore laptop

Soluzione 1

laptop[laptop!="apple"]

Soluzione 2

laptop[-1]

6. Convertire il vettore di caratteri laptop in un vettore numerico

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

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

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

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)
  )
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

LETTERE.campione[10:20]

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

Soluzione 1

LETTERE.campione[1:length(LETTERE.campione)-1]  

Soluzione 2

LETTERE.campione[-length(LETTERE.campione)]  

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

if isTRUE(LETTERE.campione=='E')
which(LETTERE.campione=='E')

13. Compattare gli elementi del vettore LETTERE.campione

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

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)))