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