Learn R Programming

svSocket (version 1.0.0)

evalServer: Evaluate R code in a server process

Description

This function is designed to connect two R processes together using the socket server. It allows for piloting the server R process from a client R process, to evaluate R code in the server and return its results to the client.

Usage

evalServer(con, expr, send = NULL)

Arguments

con

a socket connection with the server (see examples).

expr

an R expression to evaluate in the server.

send

optional data to send to the server.

Value

The object returned by the last evaluation in the server.

Details

The function serializes R objects using dump() on the server, and it source()s the data on the client side. It has, thus, the same limitations as dump(), (see ?dump), and in particular, environments, external pointers, weak references and objects of type S4 are not serializable with dump() and will raise an error, or will produce unusable objects on the client side. Note also that lists or attributes of accepted objects may contain external pointers or environments, and thus, the whole object becomes unserializable. In that case, try to coerce your object, or extract a part of it on the server side to make sure you send just the part that is transferable between the two R processes.

See Also

sendSocketClients()

Examples

Run this code
# NOT RUN {
# Start an R process and make it a server
library(svSocket)
startSocketServer()

# Start a second R process and run this code in it (the R client):
library(svSocket)

# Connect with the R socket server
con <- socketConnection(host = "localhost", port = 8888, blocking = FALSE)

L <- 10:20
L
evalServer(con, L)             # L is not an the server, hence the error
evalServer(con, L, L)          # Send it to the server
evalServer(con, L)             # Now it is there
evalServer(con, L, L + 2)
L
evalServer(con, L)

# More examples
evalServer(con, "x <- 42")     # Set x
evalServer(con, "y <- 10")     # Set y
evalServer(con, x + y)         # Quotes not needed
evalServer(con, "x + y")       # but you can put quotes if you like
evalServer(con, x)             # Same as get x
evalServer(con, "x + Y")       # Return server side-error to the client
evalServer(con, x)             # Keep working after an error
evalServer(con, "x <- 'a'")    # Embedded quotes are OK

# Examples of sending data
evalServer(con, X, -42)        # Alternative way to assign to X
evalServer(con, Y, 1:10)
evalServer(con, X + Y)
X  # Generates an error, X is not here in the client, only on the server
evalServer(con, X)
evalServer(con, "Z <- X + 3")  # Send an assignment to execute remotely
evalServer(con, X + Z)
evalServer(con, "Z <- X + 1:1000; NULL")   # Same but do not return Z
evalServer(con, length(Z))
Z <- evalServer(con, Z)        # Bring it back to client
Z

# Close connection with the R socket server
close(con)

# Now, switch back to the R server process and check
# that the created variables are there
L
x
y
X
Y
Z

# Stop the socket server
stopSocketServer()
# }

Run the code above in your browser using DataLab