Anteprima
Vedrai una selezione di 5 pagine su 18
Esercizi di Informatica per le biotecnologie Pag. 1 Esercizi di Informatica per le biotecnologie Pag. 2
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Esercizi di Informatica per le biotecnologie Pag. 6
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Esercizi di Informatica per le biotecnologie Pag. 11
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Esercizi di Informatica per le biotecnologie Pag. 16
1 su 18
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

M[3, 2]; M[3, 4]; M[3, c(2, 4)] <- 0

Creare due matrici 2x3, A e B, ed eseguirne la somma, il prodotto, la sottrazione e la divisione

“elemento per elemento”

A <- matrix(seq(1, 10, length.out=6), nrow=2, ncol=3)

B <- matrix(seq(-5, 5, length.out=6), nrow=2, ncol=3)

A + B; A - B; A * B; A / B

Estrarre dalla matrice al punto 2 la sottomatrice contenente le righe la somma dei cui valori

sia maggiore 7

M[rowSums(M) > 7, ]

Determinare il massimo e il minimo di ogni riga e di ogni colonna (consiglio: usare la funzione

range()

range(M[1, ]); range(M[, 1])

range(M[2, ]); range(M[, 2])

range(M[3, ]); range(M[, 3])

range(M[4, ]); range(M[, 4])

range(M[5, ]); range(M[, 5])

Lezione5

which() prende come argomento una condizione applicata a un vettore e restituisce gli indici

degli elementi del vettore dove la condizione è vera. Spesso il comando which si usa in coppia

con il comando %in%

source(“nomescript”) carica uno script, ovvero un file contenente solo le istruzioni R

(rm(list=ls() ) cancella il contenuto del workspace

Caricare l'archivio R dataFL.Rdata

Esercizio:

load("dataFL.Rdata")

dataFL <- as.vector(dataFL) #per essere sicuri che lo tratti come vettore

Contare quante misurazioni cadono nell'intervallo [90, 101) (90 incluso, 101 escluso)

cat("numero misurazioni in [90,101):", sum(dataFL >= 90 & dataFL < 101), "\n")

Verificare se la misurazione 92 è presente nei dati

print(paste0("92 presente in dataFL: ", 92 %in% dataFL))

#Si noti la differenza con cat: print non concatena automaticamente i suoi argomenti e li

converte in stringhe, lo facciamo noi con paste0()

Calcolare le posizioni nel vettore dataFL delle misurazioni pari a 92

cat("92 in posizione:", which(dataFL == 92), "\n")

#se avessi messo (dataFL = 92) mi restituisce un valore TRUE, corrispondente a 1

#il singolo = assegna un valore agli argomenti

# == verifica un'uguaglianza

Eliminare dal vettore tali misurazioni senza aggiornare dataFL

dataFL[- which(dataFL == 92)]

Creare un nuovo vettore partendo da dataFL e aggiungendo 1

dataFL2 <- dataFL + 1

N <- length(dataFL)

mu1 <- sum(dataFL)/N

mu2 <- sum(dataFL2)/N

sc1 <- dataFL - mu1

sc2 <- dataFL2 - mu2

print("Correlazione tra dataFL e dataFL + 1:")

print( sum(sc1*sc2)/(sqrt(sum(sc1^2)*sum(sc2^2))) )

Calcolare coefficiente di correlazione

r <- sum(scx*scy)/sqrt(sum(scx^2)*sum(scy^2))

Creare un nuovo vettore partendo da dataFL invertendone gli elementi. Calcolare la

correlazione tra i due vettori

as.vector(dataFL)

dataFL = as.vector(dataFL)

dataFL[lenght(dataFL):1]

inv <- dataFL[1:length(dataFL)]

#oppure comando rev(dataFL)

Tracciare l'istogramma dei dati dataFL

hist(dataFL, ylab="Tempo (ms)")

Tracciare un grafico di dispersione dei due vettori al punto 7, rappresentanto i punti con dei

triangoli blu, etichettando gli assi

# apriamo una nuova finestra windows()

plot(dataFL, inv, xlab="dataFL", ylab="Inverted dataFL", pch=2, col="blue")

Salvare i due vettori al punto 7 in un archivio R

save(dataFL, inv, file="test.Rdata")

Lezione6

L’istruzione if ... else permette flussi alternativi di esecuzione, dipendenti dalla valutazione di

una condizione logica Sintassi:

if (condizione)

blocco1

else

blocco2

Semantica: se condizione è vera viene eseguito il blocco1, altrimenti viene eseguito il blocco2,

mai entrambi.

Le istruzioni if..else possono essere innestate cioè blocco 1 e/o blocco 2 possono contenere

altre istruzioni if..else e permettono di ripetere ciclicamente blocchi di istruzioni un numero

prefissato di volte fino a che una determinata condizione logica viene soddisfatta, oppure fino

ad un'istruzione di uscita.

Sono istruzioni la cui struttura sintattica è del tipo:

ciclo {blocco istruzioni}

Sintassi:

for (var in v)

blocco istruzioni

v di solito è il vettore dei valori che var deve assumere

Semantica: gli elementi di v sono assegnati uno alla volta alla variabile var. Il blocco istruzioni

viene valutato una volta per ogni valore che var assume in genere, var compare nelle

istruzioni contenute nel blocco, ma non necessariamente.

function() crea una funzione di comandi in R

Sintassi:

function (argomenti) {corpo_della_funzione}

Argomenti è una sequenza (anche vuota) di ingressi, detti formali, separati da virgole:

(arg1, arg2, ..., argN). Un argomento formale può essere un simbolo o istruzione del tipo

'simbolo = espressione'. Il corpo è un blocco di istruzioni

source() richiama le funzioni, scritte in un file di testo di estensione .R

Scrivere una funzione R stats che ha come input un vettore numerico v,

Esercizio:

rappresentante un campione di una popolazione, e restituisca un vettore contenente la media

campionaria, la deviazione standard, la differenza interquatile, e il numero di valori estremi (0

se assenti). Il vettore deve possedere l'attributo names impostato. Non usare comandi

predefiniti R. Salvare la funzione nel file solEsercitazione6.R

stats <- function(v){

q13 <- quantile(v, probs=c(0.25, 0.75))

diffInt <- q13[2] - q13[1]

numEstr <- sum(v < 1.5*diffInt - q13[1] | v > 1.5*diffInt + q13[2])

res <- c(media, devstd, diffInt, numEstr)

names(res) <- c("media", "deviazione standard",

"differenza interquartile",

"Numero valori estremi")

return(res)

}

Leggere mediante il comando scan il file firefly.txt assegnando il risultato al vettore data.

Quindi chiamare la funzione stats su data, stampando a video il risultato con la funzione

print()

data <- scan("firefly.txt", what=numeric(0))

print(stats(data))

Scrivere una funzione R mult_camp che esegue un campionamento casuale (uniforme)

multiplo dal suo primo argomento (un vettore) v. Il numero di elementi da estrarre (senza

rimpiazzo) è espresso come proporzione della lunghezza di v, indicata dal suo secondo

argomento prop (controllare che prop sia in (0,1] - usare if). Il numero di campionamenti è il

terzo argomento, indicato con nc (valore di default 3). I campioni estratti vanno inseriti in una

matrice di nc righe, restituita all'ambiente chiamante (usare sample e ciclo for). Infine

chiamare la funzione su data, con proporzione 20% e 10 estrazioni

mult_camp <- function(v, prop, nc=3){

if(prop <=0 || prop > 1){

stop("L'argomento prop deve essere compreso tra 0 e 1\n")

}

N <- length(v)

size <- ceiling(N * prop)

# size calcola la taglia del campione

# N ci serve per calcolare la lunghezza del campionamento

# N*prop per essere sicuri di prendere almeno un elemento

res <- matrix(nrow=nc, ncol=size)

for(i in 1:nc){

res[i, ] <- sample(v, size, replace=FALSE)

}

return(res)

} Riprendendo l'esercizio 3 dell'esercitazione odierna, tracciare la distribuzione di

Esercizio 1:

frequenza delle medie dei campioni estratti con la funzione mult_camp, con nc =100

(istogramma). Cosa possiamo dire rispetto alla media di data? Dove si concentra

maggiormente la frequenza? E se impostiamo nc=1000?

# carico le funzioni scritte durante la lezione 6

source("solEsercitazione6.R")

data <- scan("firefly.txt", what=numeric(0))

mcamp <- mult_camp(data, 0.2, 100)

hist(rowMeans(mcamp), xlab="Medie campioni",

main="Istogramma com 100 campioni")

#traccia su un grafico esistente la retta x=v,

#cioè una linea verticale in corrispondenza del valore v

Impostare h=v invece se si vuole una linea

orizzontale (retta y=v)

abline(v = mean(data), col="red", lty=2,lwd=2)

windows()

mcamp <- mult_camp(data, 0.2, 1000)

hist(rowMeans(mcamp), xlab="Medie campioni",

main="Istogramma com 1000 campioni")

abline(v=mean(data), col="red", lty=2,lwd=2)

: Il numero di decessi su strade lo scorso anno è il seguente: Pedoni 1699, Ciclisti

Esercizio 2

280, Motociclisti 650, Automobilisti: 1327. Rappresenta questo insieme di dati in un grafico a

torta a assegnando il colore rosso ai Pedoni e il verde ai Motociclisti

labs <- c("Pedoni", "Ciclisti", "Motociclisti",

"Automobilisti")

valori <- c(1699, 280, 650, 1327)

labs <- paste(labs, valori)

windows()

pie(valori, labs, col=c("red",

"orange", "cyan", "green"))

: Scrivere una funzione che presa in input una matrice M di due colonne, salvi in

Esercizio 3

disp.png e bar.png rispettivamente il diagramma di dispersione delle due colonne e un barplot

contenente entrambe le colonne di M. Nominare gli assi in entrambe le figure. Controllare che

la matrice abbia esattamente 2 colonne

mat_plots <- function(M){

png("disp.png")

nomi <- colnames(M)

# quando il blocco ha una sola istruzione

# e non ho ramo else posso omettere le

# graffe

if(is.null(nomi))# se mancano i nomi colonna

# li inseriamo

nomi <- paste0("Colonna", 1:2)

plot(M[,1], M[,2], xlab = nomi[1],

ylab = nomi[2])

dev.off()

png("bar.png")

colnames(M) <- nomi

barplot(M, beside=T)

dev.off()

}

# prova chiamata

load("dataSP.RData")

mat_plots(dataSP)

Tracciare un diagramma ramo-foglia per la sequenza seq(0.5, 10, length.out=7). Poi rifarlo

impostando l'argomento scale=2. Cosa notate?

stem(seq(0.5, 10, length.out=7))

stem(seq(0.5, 10, length.out=7), scale = 2)

Scrivere una funzione R conta_righe che presa in input una matrice M, calcoli il

Esercizio 4:

numero di valori estremi in ciascuna colonna, e li restituisca all'ambiente chiamante in un

vettore (usare for). Suggerimento: scrivere prima una funzione che riceve un vettore e ne

restituisce il numero di valori estremi, quindi chiamarla all'interno di conta_righe

estremi <- function(vett){

N <- length(vett)

media <- sum(vett)/N

ds <- sqrt(sum((vett - media)^2)/(N - 1))

q13 <- quantile(vett, probs=c(0.25, 0.75))

DI <- q13[2] - q13[1]

NE <- sum(vett < q13[1] - 1.5*DI | vett > q13[2] + 1.5*DI)

return(NE)

}

conta_estremi <- function(M){

N <- ncol(M)

cat("numero colonne:", N, "\n")

if(N > 0){

res <- vector("integer", N)

names(res) <- colnames(M)

# anche per il for se il blocco contiene una sola

# istruzione, le graffe si possono omettere

for(i in 1:N) res[i] <- estremi(M[,i])

return(res)

}else stop("input senza colonne\n")

}

Scrivere una funzione conta_occorrenze, che riceve due vettori, parole e cerca: entrambi

contengono delle stringhe, e la funzione de

Dettagli
Publisher
A.A. 2021-2022
18 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ariannapavi22 di informazioni apprese con la frequenza delle lezioni di Informatica e statistica per le biotecnologie e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano o del prof Frasca Marco.