Tabelle¶
Funzioni che generano tabelle
Le tabelle vengono generate attraverso funzioni differenti, ciascuna specializzata in un tipo specifico di tabella.
Funzione | Tipo di tabella |
---|---|
cat | Distribuzione di frequenze variabile categoriale |
ord | Distribuzione di frequenze + statistiche descrittive (media, deviazione standard, ecc.) |
scale | Statistiche descrittive di un set di variabili |
md | Distribuzioni di frequenze di un set di variabili multidicotomy |
mc | Distribuzioni di frequenze di un set di variabili multicategory |
tbox | Top-box di un set di variabili |
camp | Distribuzioni di frequenze a totale delle variabili dei pannelli |
camp2 | Distribuzioni di frequenze a totale delle variabili dei pannelli con totale per ogni variabie |
cbyc | Distribuzioni di frequenze variabili dei pannelli incrociate per le stesse variabili |
grid | Distribuzioni di frequenze a totale di variabili singole a confronto. Una colonnna per variabile |
fre | Distribuzione di frequenze variabile categoriale con il solo totale |
fred | Distribuzione di frequenze + statistiche descrittive con il solo totale |
desc | Statistiche descrittive di un set di variabili con il solo totale |
sord | Tabella scale di un set di variabili + singole tabelle ord |
ords | Tabelle ord di un set di variabili + scale |
Funzioni di raggruppamento delle tabelle
Le seguenti funzioni consentono di raggruppare insieme più tabelle:
Funzione | Operazione |
---|---|
vjoin | Unisce verticalmente più tabelle |
hjoin | Unisce orizzontalmente più tabelle |
htjoin | Unisce orizzontalmente più tabelle impostando solo il totale e un’etichetta per le colonne |
cat2 | Unisce due tabelle cat, la seconda con un sottoinsieme dei codici |
ord2 | Unisce due tabelle ord, la seconda con un sottoinsieme dei codici |
cat2ord | Unisce una tabella cat e una ord con un sottoinsieme dei codici |
ord2scale | Unisce una tabella ord e una scale con dei pesi differenti |
page | Inserisce un titolo e impagina le tabelle che seguono una sotto l’altra |
section | Inserisce un titolo che suddivide il report |
Argomenti comuni:
- varname|varlist: un nome di variabile o una lista di nomi di variabili
- title: il titolo della tabella. Se omesso pTabs2 cerca di ricavare il titolo dalle etichette delle variabili
- options: un Hash con vari parametri
- &block: è possibile passare ulteriori sottocomandi all’interno del blocco
I nomi delle variabili possono essere passati come stringhe (racchiusi da virgolette singole o doppie) o come simboli [1]. Liste di più variabili devono essere racchiuse tra parentesi quadre o devono comunque essere dei vettori [2]. La funzione s è utile per generare sequenze di variabili anche complesse.
1 2 3 4 5 | cat 'd1'
ord :d5, "D5. Titolo"
md [:d7_1, :d7_2, :d7_3, :d7_4, :d7_5, :d7_6, :d7_7, :d7_8, :d7_9, :d7_10]
md s(:d7_, 1..10) # => equivale all'istruzione della riga precedente
scale s([:v,'.1'], 101..104,199) # => scale [v101.1, v102.1, v103.1, v104.1, v199.1]
|
Ulteriori opzioni possono essere passate alla funzione all’interno di un blocco, secondo la sintassi:
1 2 3 4 | cat ... do
# istruzioni interne al blocco
...
end
|
Varie altre personalizzazioni delle tabelle si ottengono modificando i Parametri di configurazione. I parametri di configurazione passati all’interno del blocco di una tabella, hanno effetto solo per quella tabella.
Un underscore (_) davanti al nome dell’istruzione commenta l’istruzione e tutto il blocco corrispondente.
1 2 3 4 5 6 7 8 9 10 | # questa tabella non viene generata
_vjoin "D1 + D5" do
cat :d1 do
titles "D1"
end
ord :d5 do
w nil, -10, -5, 5, 10
titles "D5"
end
end
|
Funzioni che generano tabelle¶
cat¶
Distribuzione di frequenze per variabili categoriali.
E’ posibile ottere una tabella con le distribuzioni di frequenza di più variabili. In questo caso è utile attivare la stampa delle etichette delle variabili (rowlabel!).
1 2 | rowlabel!
cat [:d1, :d2, :d3]
|
tbox¶
tbox calcola le distribuzioni di frequenza dei valori aggregati (:codes) di un set di variabili.
Le percentuali di colonna possono essere calcolate sul totale dei casi validi di tutte le variabili oppure sulla base di ciascuna variabile. Impostare il calcolo utilizzando il parametro di configurazione base_tbox. Inoltre con il sottocomando :valids è possibile definire quali sono i codici considerati validi per il calcolo della base.
Se presenti, i totali di riga si riferiscono al totale casi validi di tutte le variabili. Può essere opportuno disabilitare i totali di riga con rtotal_.
1 2 3 4 5 6 7 8 | tbox s(:x10_, 1..10), "TOP BOX", :codes => [8, 9, 10]
base_tbox :var
tbox s(:x10_, 1..10), "TOP BOX" do
codes [8, 9, 10]
end
tbox s(:x10_, 1..10), "TOP BOX", :codes => [8, 9, 10], :valids => 1..10
|
Suggerimento
L’istruzione tbox può anche essere utilizzata per tabulare un set di variabili multiple con la base delle percentuali diversa per ciascun item
ord¶
Distribuzione di frequenze e statistiche descrittive (media, deviazione standard, ecc.).
Per le tabelle ord è possibile specificare una o due variabili. E’ possibile utilizzare una variabilie differente per il calcolo delle statistiche descrittive con la sintassi: variabile_frequenze => variabile_descrittive. Con tale sintassi il titolo non può essere inserito di seguito separato da virgola, ma deve essere inserito attraverso il parametro :title, o con il sottocomando title. E’ possibile in alternativa utilizzare il sottocomando wght per specificare le variabili da utilizzare per le statistiche descrittive.
E’ possibile specificare i pesi dei valori della variabile con il sottocomando w.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ord :d5
ord :d5 do
w 7, 2.5, 1, 0.5, 0.25
end
ord :d5 => :r5
ord :d5 => :r5, :title => "Title"
ord :d5 => :r5 do
title "Title"
end
ord :d5, "Title"
wght :r5
end
ord [:v1, :v2, :v3], "Title"
wght :x1, :x2, :x3
end
|
scale¶
scale produce le statistiche descrittive di un set di variabili. E’ possibile specificare i pesi dei valori della variabile con il sottocomando w.
sord e ords¶
sord e ords producono la tabella delle statistiche riassuntive (scale) più le singole tabelle con le distribuzioni di frequenza e le statistiche riassuntive (ord). sord mette la tabella scale prima, mentre ords la mette dopo le ord. Nel parametro options è possibile specificare:
- :w: i pesi da applicare alle variabili (array)
- :sort: il metodo di ordinamento da applicare alla tabella scale (array)
- :net: i net per le tabelle ord (hash)
- :sep: i separatore del progressivo delle tavole nel titolo; if default è .
Utilizzare nel titolo i caratteri ## che verranno sostituito con il separatore e il numero dell’item. Al titolo verrà aggiunta una riga ulteriore con l’etichetta della variabile.
sord non accetta blocchi e sottocomandi.
1 2 3 4 5 | sord s(:d6_, 1..10), "Tabella 6## - Quanto sono importanti per Lei questi aspetti?"
ords s(:d6_, 1..10), "Tabella 6## - Quanto sono importanti per Lei questi aspetti?",
:w => [4, 3, 2, 1], :sort => [:d, :mean]
:net => {"POSITIVO" => 1..2, "NEGATIVO" => 3..4}
|
md¶
Distribuzioni di frequenze di un set di variabili multidicotomy.
Nelle tabelle md (multidicotomy) viene conteggiato il valore indicato nel parametro di configurazione md_true_value (il valore predefinito è 1).
La base dei casi validi è data dai valori validi del set di variabili: tipicamente i casi con valori 0 e 1.
Se i parametri nresp e/o mresp sono attivi, in fondo alla tavola viene calcolato anche il numero delle risposte e/o il numero medio delle risposte.
Avvertimento
Se le variabili non sono codificate con 0 e 1, utilizzare le istruzioni md_tf o md_ft per modificare i parametri md_true_value e md_false_value.
1 2 3 4 5 6 | md s(:d7_, 1..10), "md"
# entrambe le istruzioni:
md_ft 1, 2
md_tf 2, 1
# impostano i valori md_false_value a 1 e md_true_value a 2
|
mc¶
Distribuzioni di frequenze di un set di variabili multicategory.
Nelle tabelle mc (multicategory) la base dei casi validi è data dai valori validi della prima variabile. Pertanto è necessario assicurarsi che tutte le osservazioni che costituiscono la base della tabella, abbiano un valore valido sulla prima variabile.
x...¶
Per le tabelle fre, fred, desc, cat, ord e scale esistono anche le varianti xfre, xfred, xdesc, xcat, xord e xscale che replicano quel tipo di tabella per ogni variabile dell’elenco. In queste tabelle nel titolo è possibili utilizzare i caratteri ## per generare una numerazione progressiva e $$ per inserire l’etichetta della variabile.
1 2 3 4 | xord s(:d6_, 1..10), "Tabella 6.##. - Quanto sono importanti per Lei questi aspetti?\n$$" do
w 4, 3, 2, 1
net "POSITIVO" => 1..2, "NEGATIVO" => 3..4
end
|
Avvertimento
Passando un elenco di variabili alle normali istruzioni (cat, ord, ecc.) si ottiene invece un’unica tabella con una sezione per ciascuna variabile.
xt...¶
xtcat e xtord oltre alla serie di tabelle xcat e xord producono una tabella riassuntiva iniziale (htjoin). Le varianti xcatt e xordt mettono la tabella riassuntiva alla fine.
1 2 3 4 | xtord s(:d6_, 1..10), "Tabella 6.##. - Quanto sono importanti per Lei questi aspetti?" do
w 4, 3, 2, 1
net "POSITIVO" => 1..2, "NEGATIVO" => 3..4
end
|
grid¶
(Vedi anche il paragrafo successivo by_value )
Le tabelle grid sono di due tipi: singole e multiple. Il risultato è l’affiancamento delle distribuzioni di frequenza a totale delle varie variabili singole o dei set di variabili multiple.
Nelle grid singole ogni colonna corrisponde a una variabile e ogni riga a uno dei livelli delle variabili. Le variabili devono avere gli stessi livelli.
Nelle grid multiple ogni colonna corrisponde a un set di variabili multidicotomy e ogni riga ai diversi item. I set di variabili multiple devono avere la stessa numerosità e avere item corrispondenti.
Le tabelle grid hanno bisogno di ulteriori etichette. Con label si specifica l’etichetta del gruppo di colonne e con labels le etichette delle singole colonne. Nelle grid singole, se labels non è specificato vengono usate le etichette delle variabili. Nelle grid multiple, le variabili vanno specificate in più gruppi (un vettore di vettori).
Se necessario, impostare nel modo opportuno le percentuali della riga del totale con trowpct e tcolpct.
1 2 3 4 5 6 7 8 9 10 11 12 13 | trowpct_
tcolpct!
grid "Test GRID\n(Variabili singole)" do
vars s(:d6_, 1..10)
label "Domanda 6"
end
grid "Test GRID\n(Variabili multiple)" do
vars ss("d9_#1_#2", 4, 8)
label "MARCHE"
labels "Marca 1", "Marca 2", "Marca 3", "Marca 4"
end
|
E’ possibile inserire esplicitamente la matrice di variabili, oppure combinare più funzioni s, oppure utilizzare la funzione ss, oppure utilizzare in_groups_of per sudividere un unico elenco:
1 2 3 4 5 6 7 8 9 10 | varlist = ['d9_1_1', 'd9_1_2', 'd9_1_3', 'd9_2_1', 'd9_2_2', 'd9_2_3', 'd9_3_1', 'd9_3_2', 'd9_3_3', 'd9_4_1', 'd9_4_2', 'd9_4_3']
vars ss("d9_#1_#2",4,3)
# ...equivale a:
vars s(:d9_1_, 1..3), s(:d9_2_, 1..3), s(:d9_3_, 1..3), s(:d9_4_, 1..3)
# ...equivale a:
vars varlist.in_groups_of(3)
# ...equivale a:
vars [['d9_1_1', 'd9_1_2', 'd9_1_3'], ['d9_2_1', 'd9_2_2', 'd9_2_3'],
['d9_3_1', 'd9_3_2', 'd9_3_3'], ['d9_4_1', 'd9_4_2', 'd9_4_3']]
|
Schema dell’impiego dei sottocomanti di una grid con variabili multiple:
by_value¶
(Vedi anche il paragrafo precedente grid )
E’ possibile tabulare batterie di variabili singole (di tipo cat o ord), disponendo i valori in orizzontale su colonne differenti (in pannello), attivando il parametro di configurazione value_by_side_freq o utilzzando più brevemente by_value. Tale tipologia di tabella è ottenibile solo a totale e quindi solo se non è attivo un pannello. Inoltre la batteria di variabili deve avere gli stessi valori o le stesse etichette dei valori.
1 2 3 4 5 6 7 8 9 | by_value!
cat s(:d5_ ,1..10), "Tabella D5"
cat s(:d6_, 1..10), "Tabella D6" do
w 0=>:na, 1=>1, 2=>2, 3=>3, 4=>4
end
by_value_
|
Nel caso sia attivo un pannello, è possibile disabilitarlo temporaneamente. E’ inoltre possibile utilizzare il parametro by_value localmente, all’interno del blocco della tabella, senza bisogno poi di disattivarlo.
1 2 3 4 5 6 | panels_
cat s(:d6_, 1..10), "Tabella D6" do
w 0=>:na, 1=>1, 2=>2, 3=>3, 4=>4
by_value!
end
panels!
|
by_stat¶
Quando le tavole sono a totale (senza variabili di pannello) il parametro stat_by_side_freq o più brevemente by_stat, dispone le statistiche in orizzontale su colonne differenti (in pannello). Tale comportamento è quello predefinito. Per disattivarlo utilizzare by_stat_ e per riattivarlo by_stat!.
Funzioni di raggruppamento delle tabelle¶
vjoin¶
Genera un’unica tabella unendo verticalmente (accoda ) più tabelle che presentano lo stesso pannello. Eventuali parametri modificati all’interno del corpo di vjoin hanno validità locale.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | vjoin "D5.2. Domanda 5 con medie più aggregazione" do
total_after!
ord :d5 do
w nil, -10, -5, 5, 10
end
cat :r5 do
titles "D5.2 aggregata"
end
end
panels.add! :month
vjoin "INVESTMENTS BY YEAR" do
years.each do |year|
filter :year => year
scale :invest, "YEAR: #{year}"
end
end
|
hjoin¶
Genera un’unica tabella unendo orizzontalmente (affianca) più tabelle che presentano la stessa fiancata. Eventuali parametri modificati all’interno del corpo di hjoin hanno validità locale.
1 2 3 4 5 | hjoin "D6_1 vs D6_2 vs D6_3" do
ord :d6_1
ord :d6_2
ord :d6_3
end
|
E’ possibile cambiare pannello all’interno di una hjoin:
1 2 3 4 5 6 | hjoin "Confronto valutazioni" do
panels.add! :v51_2
ord :v51_1
panels.add! :v52_2
ord :v52_1
end
|
Se i pannelli hanno un numero di colonne differenti, si consiglia di disattivare l’intestazione del pannello con l’istruzione vjoin_header_.
htjoin¶
Genera un’unica tabella unendo orizzontalmente (affianca) più tabelle che presentano la stessa fiancata, imposta il pannello al solo totale e aggiunge un’etichetta alle colonne. Permette di generare tabelle grid per atri tipi di variabili non previste dalla funzione grid.
Parametri aggiuntivi:
- header: l’intestazione delle colonne. Deve essere passato come argomento dopo il titolo
1 2 3 4 5 | htjoin "D6. Domanda 6 con item affiancati in colonna", "AFFERMAZIONI" do
s(:d6_, 1..10).rep do |v|
ord v
end
end
|
Attenzione
Non è possibile innestare un’istruzione *join all’interno di un’altra.
cat2¶
Genere una tabella vjoin con due tabelle cat, una con tutti i codici e una senza i codici indicati.
Parametri aggiuntivi:
- :label => string: l’etichetta della seconda tabella
- :labels => [string, string]: le etichette delle due tabelle
- :nr => code|[codes]: il codice o i codici da escludere nella seconda tabella
1 2 | cat2 :d32, "Tab. D32", :label => "Al netto del \"Non indica\"", :nr => 6
cat2 :d32, "Tab. D32", :labels => ["Con \"Non indica\"", "Al netto del \"Non indica\""], :nr => 6
|
ord2¶
Genere una tabella vjoin con due tabelle ord, una con tutti i codici e una senza i codici indicati.
Parametri aggiuntivi:
- :label => string: l’etichetta della seconda tabella
- :labels => [string, string]: le etichette delle due tabelle
- :nr => code|[codes]: il codice o i codici da escludere nella seconda tabella
1 2 3 | ord2 :d5, "Tab. D5", :label => "Al netto del \"Non indica\"", :nr => 0 do
w 0=>:na, 1=>4, 2=>3, 3=>2, 4=>1
end
|
cat2ord¶
Genere una tabella vjoin con una tabella cat e una tabella ord senza i codici indicati.
Parametri aggiuntivi:
- :label => string: l’etichetta della seconda tabella
- :labels => [string, string]: le etichette delle due tabelle
- :nr => code|[codes]: il codice o i codici da escludere nella seconda tabella
1 2 3 | cat2ord :d5, "Tab. D5", :label => "Al netto del \"Non indica\"", :nr => 0 do
w 1=>4, 2=>3, 3=>2, 4=>1
end
|
ord2scale¶
Genere una tabella vjoin con una tabella ord e una tabella scale con dei pesi differenti.
Parametri aggiuntivi:
- :label => string: l’etichetta della seconda tabella
- :labels => [string, string]: le etichette delle due tabelle
- :pref => string: un prefisso da aggiungere alle statistiche descrittive
- :suff => string: un suffisso da aggiungere alle statistiche descrittive
1 2 3 4 | ord2scale :v10, "Tab. D5", :suff => " (1-100)" do
w1 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>10
w2 1=>10, 2=>20, 3=>30, 4=>40, 5=>50, 6=>60, 7=>70, 8=>80, 9=>90, 10=>100
end
|
page¶
L’istruzione page inserisce un titolo e impagina le tabelle che seguono unendole una sotto l’altra.
Argomenti:
- "titolo": il titolo
- :title => :header|:banner|:none: lo stile del titolo (default :header)
- :panel => :first|:all: stampa il pannello solo per la prima tavola (:first il default) o per tutte le tavole (:all)
- :total => :first|:all: stampa la riga del totale solo per la prima tavola (:first) o per tutte le tavole (:all il default)
- :index => :page|:all: inserisce una voce nell’indice per ciascuna tavola (:all default) o una voce unica per tutte le tavole (:pagel)
- :stop: termina la pagina. Una nuova dichiarazione di pagina interrompe comuque quella precedente senza bisogno di indicare esplicitamente page :stop
1 2 3 4 5 6 7 8 9 10 11 12 | page "SCREENING", :total => :first
cat :s1
cat :s2
cat :s3
page "L'ACQUISTO"
ord :q1
cat :q2
cat :q3
md s(:q4, 1..10)
page :stop
|
Suggerimento
page permette anche di raggrupare in un’unica tabella più istruzioni *join.
1 2 3 4 5 6 7 8 9 10 | page "PAGE + HTJOIN", :title => :none, :total => :first, :index => :page
htjoin "Tabella D1.1", "ITEMS" do
xcat s(:d1_1_, 1..10)
end
htjoin "Tabella D1.2", "ITEMS" do
xcat s(:d1_2_, 1..10)
end
page :stop
|
Attenzione
page non controlla la coerenza degli elementi che si uniscono pertanto combina anche tabelle che hanno pannelli differenti. E’ compito dell’utente verificare la coerenza della tabella generata.
section¶
L’istruzione section "title" permette di inserire nel report dei titoli che suddividono il report in varie sezioni.
1 2 3 4 5 6 7 8 9 10 11 12 | section "PACK TEST"
cat :x1
ord :x2
...
section "PRODUCT TEST"
cat :x101
cat :x102
...
section "SOCIO-DEMO"
...
|
Utilizzando la sintassi section "tag" => "title", tag verrà usato per la generazione del nome del foglio/file nel render in formato xlsx quando si utilizza il parametro sections => :sheet|:file. Altrimenti viene utilizzato direttamente l’etichetta della sezione.
Utilizzando la sintassi section "tag" => "title" verrà inoltre definita la classe di appartenenza delle tabelle seguenti utile per la definizione dei dati in formato pulsar. E’ possibile definire sottoclassi indicando le classi genitori separate dal carattere >.
1 2 3 4 5 6 7 8 9 10 11 | section "CONS" => "ABITUDINI DI CONSUMO"
...
section "CONS>CASA" => "CONSUMO IN CASA"
...
section "CONS>FUORI" => "CONSUMO FUORI CASA"
...
section "CONS>FUORI>VAC" => "CONSUMO IN VACANZA"
...
|
section! esegue anche all all’inizio della sezione.
sections¶
sections permette di generare solo le tavole delle sezioni indicate.
E’ possibile usare stringhe/simboli o espressioni regolari.
Se è stato definito un tag, la stringa deve essere uguale al tag, altrimenti deve essere contenuta nella label.
I confronti sono case-insensitive.
Il comando sections deve essere posto prima delle istruzioni delle tabelle.
1 2 3 4 5 6 7 8 9 10 11 12 13 | sections :s2, :s4
section "s1" => "SEZIONE A"
...
section "s12" => "SEZIONE B"
...
section :s3 => "SEZIONE C"
...
section :s4 => "SEZIONE D"
...
|
autosection¶
L’istruzione autosection permette di riconoscere automaticamente le sezioni durante l’esecuzione delle tavole in base ai nomi delle variabili.
E’ possibile utilizzare un array con l’elenco di testi da cercare nel nome della variabile, oppure un hash con come chiave il testo e come valore il tag e il titolo della sezione.
Il testo verrà cercato all’inizio del nome della variabile. Alternativamente è possibile utilizzare un’espressione regolare.
Se la tabella è composta da più variabili, verrà considerata soltanto la prima.
Ciascuna sezione viene impostata una sola volta, alla prima ricerca con esito positivo del prefisso.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | autosection [:screen, :b, :c, :d, :gen]
autosection ["screen", "b", "c", "d", "gen"]
autosection %w(screen b c d gen)
autosection ["screen", /_sez1$/, /_sez_fin$/)
autosection "screen" => "SCREEN", "b" => "SEZ B", "c" => "SEZ C",
"d" => "SEZ D", "e" => "SEZ E", "gen" => "ANAG"
autosection :screen => ["SCREEN", "SEZIONE A"],
:b => ["SEZ B", "SEZIONE B"],
:c => ["SEZ C", "SEZIONE C"],
:d => ["SEZ D", "SEZIONE D"],
:e => ["SEZ E", "SEZIONE E"],
/_anag$/ => ["ANAG", "SEZIONE ANAGRAFICHE"]
|
Suggerimento
Può essere utilizzato per dividere in sezioni le tabelle dell’ autotab.
txt1, txt2, txt3¶
txt1, txt2 e txt3 permettono di inserire del testo per suddifidere ulteriormente il report oltre alle sezioni. Le tre funzioni inseriscono un titolo con livelli di formattazione differenti e opzionalmente è possibile un corpo di testo.
1 2 3 4 5 6 7 8 | section "Sezione 1"
txt1 "Sottosezione 1.1"
txt3 "Titolo" do
row "Riga 1"
row "Seconda riga"
end
|
image¶
image inserisce un’immagine nel report.
Argomenti:
- filename: il nome del file
- :title => String: il testo del titolo
- :link => String: un link da associare all’immagine
- :w => Number: l’ampiezza in pixel dell’immagine
- :n => Number: l’altezza in pixel dell’immagine
1 | image "filename.png", :title => "Titolo", :link => "https://google.com"
|
Note
[1] | Un simbolo rappresenta semplicemente una stringa ed è costituito dalla stringa di caratteri (il primo non numerico) preceduto dai due punti: :area. Il punto ”.” non può essere utilizzato all’interno di un simbolo. |
[2] | Le parentesi quadre sono la sintassi base per definire un Array (vettore), ovvero: [elemento1, elemento2, ...]. In generale può essere usata qualsiasi funzione che restituisce un array. La funzione s o seq di pTabs restituisce un array. |