Nel cuore dell’analisi dei dati e delle interrogazioni SQL risiedono le funzioni numeriche e di manipolazione delle espressioni, strumenti fondamentali per ottenere, trasformare e restituire valori precisi e significativi. Il tratto distintivo di queste funzioni è che esse restituiscono sempre un valore, di solito numerico, a partire da uno o più argomenti.
La funzione POSITION ricerca una stringa target all’interno di una stringa sorgente e restituisce la posizione del primo carattere corrispondente. Se la stringa target è assente, il risultato è zero; se la stringa target è vuota, viene restituito 1. Se uno degli operandi è NULL, anche il risultato sarà NULL.
La funzione EXTRACT è centrale nella manipolazione di date e intervalli: consente di estrarre un singolo campo (ad esempio l’anno, il mese o il giorno) da una data. EXTRACT(MONTH FROM DATE '2018-12-04') restituisce 12.
Le funzioni CHARACTER_LENGTH, CHAR_LENGTH e OCTET_LENGTH misurano la lunghezza delle stringhe, ma con distinzioni sottili. CHARACTER_LENGTH conta il numero di caratteri visibili, compresi spazi e punteggiatura, mentre OCTET_LENGTH misura la quantità di byte necessari per rappresentare una stringa, aspetto cruciale nei contesti multilingue. Ad esempio, una stringa contenente caratteri Cinesi può occupare più byte per ogni carattere rispetto all’alfabeto latino, a causa dell’uso di codifiche come UTF-16 o UTF-8, che gestiscono dinamicamente l’allocazione in base al tipo di carattere.
La funzione CARDINALITY opera sulle collezioni come array o multisets e restituisce il numero di elementi presenti. Questo è essenziale per valutare strutture dati complesse memorizzate come colonne di tabelle.
ABS restituisce il valore assoluto di un’espressione numerica, eliminando qualsiasi segno negativo. Le funzioni trigonometriche (SIN, COS, TAN e le loro controparti inverse e iperboliche) forniscono i valori usuali delle funzioni angolari, utili in contesti scientifici e ingegneristici.
Le funzioni logaritmiche (LOG, LOG10, LN) permettono di calcolare logaritmi in base arbitraria, dieci o naturale. Sono strumenti fondamentali nelle trasformazioni non lineari e nella gestione delle scale esponenziali. Allo stesso modo, EXP eleva il numero e (base dei logaritmi naturali) a una potenza specificata.
MOD restituisce il resto della divisione tra due numeri: MOD(6,4) restituisce 2. È utile nelle operazioni cicliche o di ripartizione.
POWER consente di elevare un numero a una potenza arbitraria: POWER(3,7) restituisce 2187. In parallelo, SQRT restituisce la radice quadrata di un numero, ad esempio SQRT(9) restituisce 3.
FLOOR e CEIL (o CEILING) forniscono, rispettivamente, l’arrotondamento per difetto e per eccesso verso l’intero più vicino. FLOOR(2.73) dà 2.0, mentre CEIL(2.73) dà 3.0.
Infine, la funzione WIDTH_BUCKET rappresenta un raffinato strumento OLAP, in grado di collocare un valore all’interno di un intervallo suddiviso in sottosezioni di uguale ampiezza. WIDTH_BUCKET(PI, 0, 10, 5) restituisce 2, poiché π cade nel secondo intervallo tra 2 e 4. Se il valore è fuori dal range specificato, il risultato sarà zero o superiore al numero di bucket, in base alla sua posizione rispetto ai limiti.
La conoscenza approfondita di queste funzioni è indispensabile per chiunque intenda padroneggiare SQL come linguaggio di interrogazione, non solo per scrivere query corrette, ma anche per renderle espressive, ottimizzate e semanticamente dense.
È fondamentale comprendere che molte di queste funzioni assumono comportamenti diversi in presenza di valori nulli, letterali o espressioni dinamiche. Inoltre, la scelta della funzione da utilizzare deve sempre tener conto del contesto: ad esempio, CHARACTER_LENGTH è inutile quando l’argomento è un letterale noto, ma diventa essenziale quando l’input è dinamico. Altre funzioni, come OCTET_LENGTH, richiedono una profonda comprensione della codifica dei caratteri e della gestione delle stringhe multilingua, aspetto spesso trascurato ma di importanza critica in ambienti internazionali.
Come funziona la definizione e l’uso delle funzioni in R: flessibilità, operatori e vettorialità
In R, la definizione di una funzione avviene specificando un argomento generico che non è vincolato a un campo specifico di un dataset, il che consente di riutilizzare la funzione su insiemi di dati diversi senza modificarla. Per esempio, la funzione definita come MeanSalary2 <- function(x) {return(mean(x))} non si riferisce direttamente al campo Salary del dataset EmployeeRoll, ma prende in input qualsiasi vettore numerico x e restituisce la media dei suoi valori. Questo approccio evidenzia un principio fondamentale della programmazione funzionale in R: la generalità e riusabilità del codice.
Quando si chiama la funzione, come in MeanSalary2(EmployeeRoll$Salary), il placeholder x viene sostituito con il vettore specifico, e la funzione calcola la media. Questa stessa funzione può essere applicata, senza alcuna modifica, a dati completamente diversi, come un vettore di salari in un’altra azienda: MeanSalary2(c(500000, 1000000, 75000, 112000, 400000)). Il risultato sarà la media di quel nuovo insieme di dati, dimostrando come le funzioni in R facilitino un codice pulito, leggibile e versatile.
Alla base dell’efficienza e della potenza di R vi è la sua capacità di trattare gli operatori matematici non solo come simboli, ma anche come funzioni. Ad esempio, l’operatore < può essere utilizzato come funzione in sé: "<"(2,3) restituisce TRUE. Questa dualità tra operatori e funzioni consente di manipolare i dati in modo flessibile, sebbene ogni operatore abbia un numero limitato di argomenti accettabili, come evidenziato dall’errore generato dall’uso improprio di + con più di due argomenti.
Un concetto chiave in R è la vettorializzazione, che permette di operare su vettori interi senza dover scrivere esplicitamente cicli. Questo è possibile grazie alla proprietà della “riciclabilità”, che consente a vettori di dimensioni differenti di essere automaticamente adeguati per operazioni elemento per elemento. Per esempio, sommando un vettore m = c(10, 6, 9) con una costante c = 3 si ottiene x = c(13, 9, 12) senza alcun ciclo esplicito, poiché R “ricicla” il valore singolo di c per ciascun elemento di m. Questa caratteristica ottimizza l’efficienza e rende il codice più conciso e leggibile.
L’utilizzo di strutture condizionali all’interno di iterazioni diventa anch’esso più semplice e compatto con la funzione ifelse(), che valuta condizioni vettoriali restituendo un vettore di risultati corrispondenti, senza bisogno di scrivere i classici cicli for e if. Ad esempio, trasformare una condizione iterativa tradizionale in una semplice riga di codice vettorializzato migliora significativamente la chiarezza e la velocità di esecuzione.
R è inoltre un linguaggio orientato agli oggetti, dove ogni elemento è definito da attributi, in particolare la classe dell’oggetto, che ne determina il comportamento. Questa caratteristica facilita la gestione di dati complessi e l’applicazione di metodi statistici avanzati, come la regressione lineare su dati reali, permettendo di manipolare set di dati con facilità e rigore.
Oltre a comprendere come si definiscono e usano le funzioni, è fondamentale per il lettore comprendere il valore della generalizzazione in programmazione: scrivere codice che non dipenda da dati specifici, ma sia adattabile a molteplici contesti. Questo consente di risparmiare tempo, ridurre errori e migliorare la manutenzione del codice. Inoltre, la padronanza della vettorializzazione e della riciclabilità apre la porta a uno stile di programmazione efficiente, che sfrutta appieno la potenza di R per operazioni su grandi quantità di dati.
Il lettore deve anche riconoscere che, pur essendo R ricco di funzionalità astratte come gli operatori trattati come funzioni e l’orientamento agli oggetti, la chiarezza e la semplicità del codice devono rimanere prioritarie. Saper scrivere funzioni flessibili e applicare concetti di vettorialità evita la complessità superflua e aiuta a mantenere la leggibilità, qualità imprescindibili nel lavoro con dati reali e complessi.
Ottimizzazione della Gamma Dinamica nella Rilevazione del DNA Target tramite il Metodo del Sandwich con AuNPs
Come si aggiungono e si gestiscono i contenuti nel Block Editor: blocchi, separatori e formattazione testuale
Come il Xenon-135 Influenza la Distribuzione di Potenza nei Reattori Nucleari: Controllo e Oscillazioni
I cosacchi: coraggio, onore e sacrificio nella storia russa
Saggio Finale 2017-2018: Temi Aperti per la Maturità Letteraria e Morale degli Studenti
Il "linguaggio" Iustin Romaniko (Dalla vita combattiva del reggimento di Ermak Timofeev dei cosacchi siberiani)
Informazioni sul supporto materiale e tecnico per l'insegnamento della scienza sociale

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский