====== External Communication ====== Dinamica EGO can communicate with external applications by exposing a communication session. By default, an opened session will be created and its name is displayed on the status bar: {{:statusbar_external.png|}} To send and receive data, the functors under the 'External Communication' folder in the Library can be used.\\ {{::externalcommfunctors.png|}} If the status bar shows 'External communication: off', check the Message Log for more information. ==== Pre Requisites ==== The following packages are necessary for sending and receiving data using R. To install the packages, do: install.packages(c("Rcpp", "RcppProgress", "rbenchmark", "inline")) if you are using Microsoft Windows, make sure your R installation path does not contain spaces. On Microsoft Windows, [[https://cran.r-project.org/bin/windows/Rtools/|R Tools]] is required (default installation path [c:\rtools] is **mandatory**). Make sure you also select the option to add RTools to system PATH. ==== Command Line === Download {{::dinamica_1.0.4.tar.gz|Dinamica Package for R}} and install it: install.packages("PATH_TO_DOWNLOADED_FILE", repos=NULL, type="source") where PATH_TO_DOWNLOADED_FILE should match the downloaded file path, e.g. "/home/csr/Downloads/dinamica_1.0.4.tar.gz" on Linux or "c:/Users/CSR/Downloads/dinamica_1.0.4.tar.gz" on Windows.\\ \\ Using the example path "/home/csr/Downloads/dinamica_1.0.4.tar.gz": install.packages("/home/csr/Downloads/dinamica_1.0.4.tar.gz", repos=NULL, type="source") ==== R Studio ==== \\ Download {{::dinamica_1.0.4.tar.gz|Dinamica Package for R}} and install it (using RStudio): Tools -> Install Packages... \\ === Documentation === The Dinamica R package contains all the documentation available on this page, including examples and R Studio references. === Session === To connect to an existing session: Dinamica::openSession("DinamicaEGO") # "DinamicaEGO" is the session name. \\ ====== Send and Receive Data ====== ===== Real value ===== To send a Real value (e.g. 3.141592, the PI constant): Dinamica::sendNumber(3.141592); \\ To receive a Real value: myNumber <- Dinamica::receiveNumber(); In the above example, the received Real value will be stored in the **myNumber** variable. \\ \\ ===== List / Vector of Real values ===== To send a list of Real values (e.g. 1, 2, 3, 4, 5): myList <- c(1, 5); Dinamica::sendNumberVector(myList); In the above example, the user created **myList** will be sent. \\ \\ To receive a list of Real values: receivedList <- Dinamica::receiveNumberVector(); In the above example, the variable **receivedList** will store the contents of the received List of Real values. \\ \\ ===== Lookup Table ===== Consider the following **LookupTable** stored on the variable **myLUT**: myLUT <- list( Keys = c(1:5), Values = c(1:5) * 2 ) ^ Keys ^ Values ^ |1 | 2 | |2 | 4 | |3 | 6 | |4 | 8 | |5 | 10 | To send the **myLUT** **LookupTable**: Dinamica::sendLookupTable(myLUT$Keys, myLUT$Values); \\ To receive a lookup table: receivedLUT <- Dinamica::receiveLookupTable(); In the above example, the variable **receivedLUT** will store the contents of the received LookupTable. The columns 'Keys' (receivedLUT**$**Keys) and 'Values' (receivedLUT**$**Values) will contain the transferred Data. \\ \\ ===== Table ===== When transferring **Tables**, extra caution must be taken (refer to [[r_communication_utilities|this page]] for auxiliar tools.) - **Factor** columns must be converted to **Character Vectors** - Key columns can contain the '*' character on their names (to indicate they represent unique values). - From R to Dinamica, the **Table** variable **must** have the **DataFrame** type (or compatible). \\ Consider the following **Table**: ^ Product ^ Price ^ Stock Quantity ^ | Rice | 2.50 | 1e6 | | Pasta | 1.50 | 500 | | Corn | 0.50 | 1000 | myTable <- data.frame(Product = c("Rice", "Pasta", "Corn"), Price = c(2.5, 1.5, 0.5), Quantity = c(1e6, 500, 1000), stringsAsFactors = FALSE) Notice the use of the **stringAsFactors = FALSE** flag. This flag prevents R from converting the passed strings to Factors. \\ To send the **myTable** **Table**: Dinamica::sendTable(myTable); We never specified which column is the **Key** column. By default, the first column will be converted to the Key column. \\ \\ Suppose you want to send the following Table instead: ^ State ^ City ^ Population ^ | Massachusetts | Boston | 667137 | | Massachusetts | Chelsea | 39398 | myTable <- data.frame(State = c("Massachusetts", "Massachusetts"), City = c("Boston", "Chelsea"), Population = c(667137, 39398), stringsAsFactors = FALSE) To send the new version of **myTable**: Dinamica::sendTable(myTable, 2); Notice the extra parameter **2**? This optional parameter tells Dinamica, how many Key columns are being sent, from the leftmost column. \\ To receive a table: receivedTable <- Dinamica::receiveTable(); In the above example, the variable **receivedTable** will store the contents of the received Table. \\ \\ ===== String ===== To send a string (e.g. "testing!"): Dinamica::sendString("testing!"); \\ To receive a string: receivedString <- Dinamica::receiveString(); In the above example, the variable **receivedString** will contain the received String value. \\ \\