R Engine

Navigation:  Il Package: lavorazione dei dati > Arricchimento del Package >

R Engine

Previous pageReturn to chapter overviewNext page

L'R Engine REngine_16  è l'oggetto del Package che consente di ottenere un output sotto forma di tabella a partire da un'analisi dati effettuata per mezzo di uno script in linguaggio R, anche a partire da dati già presenti in IrionEDM.

 

IrionEDM offre due modalità di utilizzo dell'R Engine:

Client

Server

L'impostazione della modalità è effettuata valorizzando la property UseServerEngine che ha, per default, il valore False (i.e. imposta l'uso del client).

 

L'uso in modalità Client prevede la presenza di un apposito motore R sul client.

Sono compatibili motori R client delle seguenti famiglie:

Open source, a 32 o 64 bit

Microsoft R Client, a 64 bit

 

info

Benché i motori clienti Open Source possano risultare più performanti, i motori Microsoft sono preferibili in quanto contengono le librerie di funzioni Revo Scaler e gestiscono il multithreading.

 

L'uso in modalità Server richiede l'installazione di SQL Server 2016 sul Catalog server, comprensiva dell'apposito servizio SQL Server R Service (che richiede una configurazione accessoria a SQL Server 2016).

 

warning

SQL Server delega attraverso la sp_execute_external_script con alcuni parametri SQL, tra cui il blocco di codice R inserito nel tab script. La stored procedure deve essere, pertanto, attivata.

 

La definizione dell'R Engine presuppone il completamento dei seguenti Tab:

General

Script

Input DataSet

Columns

Dynamic Properties

 

Il tab General contiene le informazioni anagrafiche dell'oggetto del Package e permette di modificarne il nome e la descrizione opzionale.

 

Il codice R si inserisce nel tab Script. L'inserimento è supportato da IntelliSense.

Mandando in esecuzione ovvero in preview lo Script, si ottiene come risultato l'Outcome del motore R, impacchettato secondo i tipi SQL e visualizzato in IrionEDM come tabella.

 

Nel caso sia attiva l'opzione Server, SQL Server 2016 ha due parole chiavi:

InputDataSet, tabella di input che diamo all' R Engine da specificare nel tab apposito (è uno dei parametri della sp)

OutputDataSet, tabella di output del codice R

In particolare, OutputDataSet è una variabile che, in questo caso, deve essere obbligatoriamente dichiarata alla fine dello script. Tale output deve essere un oggetto data.frame.

 

info

In caso di presenza di un Iterator con più righe, la tabella di output è il risultato dell’unione (equivalente ad una UNION ALL di SQL) dell’esecuzione su ogni riga dell’Iterator.

 

Il tab Column consente la definizione delle colonne di output. A differenza della maggior parte degli oggetti del Package, il default della property UnexpectedColumns dell'oggetto è read. Ciò garantisce l'uso dell'engine senza dover necessariamente censire i tipi delle colonne. In casi particolari, è comunque possibile definire manualmente le colonne nel tab Columns.

 

Solo nel caso in cui sia attiva l'opzione Client, è possibile forzare la denominazione delle colonne assegnando ad esse una denominazione attraverso uno script che restituisca, come output, un array con le variabili precedentemente impostate:

OutputDataSet <- c(var1,..., varN)

 

Nel caso in cui sia attiva l'opzione Client, inoltre, non è necessario specificare l'OutputDataSet ed è anche possibile usare altri tipi di oggetti in output oltre il data.frame (e.g. list, matrix)

 

La presenza del campo Iterator, posto al di sopra del riquadro dello script, è motivata dal fatto che il motore R, tanto nell'opzione Client che in quella Server, accetta in input una sola tabella.

 

Il campo Iterator può essere compilato attraverso una Custom Query SQL oppure inserendovi un altro oggetto del Package che restituisca, in output, una struttura tabellare.

 

Esistono casi in cui (e.g. modelli predittivi per il machine learning, presenza di coefficienti) è, tuttavia, necessario avere un input multiplo.

L'Iterator è pertanto necessario per inserire scalari (nel caso del machine learning si tratta di un varbinary che contiene il modello).

Nel caso di più righe restituite dalla query dell'iteratore, si eseguono più istanze dell'R Engine in serie e si ottiene, come risultato, l'unione degli esiti delle singole iterazioni, ciascuna eseguita con gli scalari presenti sulla rispettiva riga.

 

warning

A differenza dei DatabaseLink e dei DataboxLink, non è necessaria una sintassi particolare, ma si inserisce nello script direttamente il nome del campo restituito dall'Iterator.

 

Il tab Input DataSet permette di impostare, in forma di tabella SQL, il DataSet da cui R estrarrà i dati di input su cui effettuare analisi.

 

ex

Approfondimento: Plottare dati con l'R Engine

I motori R sono in grado di plottare grafici. IrionEDM permette di inserire questi grafici nella tabella di output come varbinary. In seguito, l'output può essere riutilizzato come input di altri oggetti del Package.

Uno script che permette di plottare due grafici e inserirli in due celle (colonne) della tabella di output è il seguente:

         

my_array_1 <- c(10,1, 150, 11, 250, 40)

my_array_2 <- c(9,7, 23, 11, 13)

 

image_file_1 = tempfile();  

jpeg(filename = image_file_1); 

barplot(my_array_1);

dev.off();

 

image_file_2 = tempfile();  

jpeg(filename = image_file_2); 

barplot(my_array_2);

dev.off();

 

plot_1 <- readBin(file(image_file_1, "rb"), what=raw(), n=1e6)

plot_2 <- readBin(file(image_file_2, "rb"), what=raw(), n=1e6);

 

l <- list(plot_1, plot_2)

 

m <- matrix(l)

OutputDataSet <- m

 

APPROFONDIMENTI E ARGOMENTI CORRELATI

& MultiInput ed ExtendedOutput