Espressioni¶
Diverse funzioni in pTabs (filter, select, rake, value_if, recode, ecc.) richiedono o consentono l’utilizzo di espressioni sulle variabili del data frame. E’ possibile specificare le espressioni in tre modi diversi:
- il semplice nome della variabile o nome preceduto da ! per indicare i casi validi o non validi sulla variabile
- un hash (dizionario) con le coppie variabile-valori
- più coppie variabile-valori sono unite in AND nell’espressione
- :na e :valid rappresentano, rispettivamente, i valori mancanti e i valori validi
- in relazione al contesto, in alcuni casi le parentesi graffe {} possono essere omesse
- una stringa con un’espressione R
- operatori relazionali: ==, !=, <, >, <=, >=
- operatori logici: & (AND), | (OR), ! (NOT)
- appartenenza: %in%
- il cancelletto (#) datavanti alla variabile converte la variabile in numerica [1]
Esempi con sintassi alternative:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # valori validi
{:x1 => :valid}
:x1
"!is.na(x1)"
# valori mancanti
{:x1 => :na}
"!x1"
"is.na(x1)"
# uguale a un valore
{:sesso => 1}
"#sesso == 1"
"as.numeric(sesso) == 1"
# minore di un valore
{:etanum => '<25'}
"etanum < 25"
# due condizioni diverse in AND
{:sesso => 1, :etanum => '<25'}
"#sesso == 1 & etanum < 25"
# più valori di una stessa variabile(in OR)
{:region => [1,3,7]}
"#region %in% c(1,3,7)"
# range
{:etanum => 18..24}
"etanum %in% 18:24"
|
Esempi di espressioni realizzabili solo con espressioni R:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # diverso
"#sesso != 1"
# NOT
"!etanum == 18"
# due condizioni in OR
"#campio == 1 | #area == 3"
# etichetta del livello
"sesso == 'Maschio'"
# parentesi
"(v1.1 == 1 | v1.2 == 1) & v1.3 == 0"
"! (v1.1 == 1 & v1.2 == 1)"
# funzioni
"apply(dfr[,c('d7_1', 'd7_2', 'd7_3')]==1, 1, all)"
|
parse, parse!, parse?¶
parse espande/converte in R l’espressione e la resituisce come stringa
parse! espande/converte in R l’espressione, la stampa e la resituisce come stringa
parse? espande/converte in R l’espressione, controlla che sia valida, la stampa e restituisce un vettore di tre elementi:
- il numero di casi
- l’espressione R
- l’eventuale messaggio di errore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | x = parse(:region => 3..7, :sesso => 2)
debug x
# => <String> "(as.numeric(region) %in% 3:7) & (as.numeric(sesso)==2)"
parse! :region => 3..7, :sesso => 2
# => <String> "(as.numeric(region) %in% 3:7) & (as.numeric(sesso)==2)"
x = parse?(:region => 3..7, :sesso => 2)
debug x
# => <Array> [102, "(as.numeric(region) %in% 3:7) & (as.numeric(sesso)==2)", ""]
ncasi, exp, err = x
debug ncasi, exp, err
# => <Fixnum> 102
# => <String> "(as.numeric(region) %in% 3:7) & (as.numeric(sesso)==2)"
# => <String> ""
parse?(:region => 3..7, :sesso => 2)
# => <Array> [0.0, "(as.numeric(xregion) %in% 3:7) & (as.numeric(sesso)==2)", "(checkExpression) oggetto \"xregion\" non trovato"]
...
...
- R ha restituito 1 errore/i:
- (checkExpression) oggetto "xregion" non trovato
|
Vedi anche get_selection e get_selection_u
Note
[1] | Quest’uso del carattere # non è in realtà parte del linguaggio R. pTabs lo sostituisce con la funzione as.numeric() traducendo così i livelli di una variabile factor in una sequenza di numeri interi che partono da 1. Per esempio #x1 viene trasformato in as.numeric(x1). |