Archivi per la categoria: programmazione

State creando un loop, ma l’output di ogni ciclo è un po’ “complesso”. Insoma, non lo potete mettere in una matrice, o in un vettore…e allora cosa c’è di meglio che creare una lista ed inserirlo li?

lista.mod <- vector('list', length(lista))

for (i in 1:n){
    
    lista.mod[[i]] <- ARG

    }

try è una utilissima funzione, da utilizzare specialmente nei loop (apply, by, quelli del package plyr,…) per evitare che si blocchino a causa di un calcolo che non avviene nel modo corretto. Supponiamo ad esempio che dobbiate fare una regressione non lineare, in questo caso può accadere che, se gli starting point non sono adeguati, il comando non vada a buon fine e che si interrompa il loop….con tutti i problemi del caso.
ecco che utilizzando la funzione try() è possibile gestire l’errore e dare alla funzione una via di uscita, da percorrere in caso di problemi, senza che si interrompa il ciclo.
in generale il codice da usare è il seguente:

RISULTATO <- try(FUNZIONE_CHE_PUO_FALLIRE, silent=T)
if (class(RISULTATO)=="try-error"){
COND1
} else {
COND2
}

Created by Pretty R at inside-R.org

potete trovare un esempio ed ulteriori informazioni qui BIOCODENV BLOG e qui WORKING WITH DATA

Forse vi sarete chiesti di quanti “vocaboli” (ovvero funzioni) disponga R…be, sono diverse migliaia, per l’esattezza 2382.
Ma quante sono poi quelle effettivamente utili? quelle che andrebbero sapute per forza? Hadley Wickham dice 350. L’elenco lo trovate qui.

R viene aggiornato con una cadenza piuttosto frequente. Molto bene! Direte voi. Purtroppo c’è un problema. Ogni qualvolta aggiornerete R lui si “dimenticherà” di tutte le migliaia di package che avevate fino a quel momento faticosamente installato.

Non vi preoccupate. C’è anche una soluzione. Prima di installare la nuova versione, aprite quella vecchia e digitate il seguente codice:

packages <- installed.packages()[,"Package"] save(packages, file="Rpackages") 

poi chiudetela, installate la nuova e scrivete:

load("Rpackages") for (p in setdiff(packages, installed.packages()[,"Package"])) install.packages(p) R scaricherà ed installerà di nuovo tutti i package che avevate in precedenza, nelle versioni più aggiornate! 

Due link utili: Stackoverflow e One R tip a day

Quando si scrive una funzione è opportuno mettere dei controlli, all’inizio del codice, per verificare che l’input sia corretto e comunicare con chiarezza all’utilizzatore il tipo di problema che si può essere verificato. In questo post si spiega l’impiego di codice tipo:

if (missing(var1))
 stop("Manca var 1.")

 if (!is.numeric(num2))
 stop("Eilà! num2 deve essere un numero!")
if (r < 0)
 stop("Negative r specified.")