Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R, passing variables to a system command

Using R, I am looking to create a QR code and embed it into an Excel spreadsheet (hundreds of codes and spreadsheets). The obvious way seems to be to create a QR code using the command line, and use the "system" command in R. Does anyone know how to pass R variables through the "system" command? Google is not too helpful as "system" is a bit generic, ?system does not contain any examples of this.

Note - I am actually using data matrices rather than QR codes, but using the term "data matrix" in an R question will lead to havoc, so let's talk QR codes instead. :-)

system("dmtxwrite my_r_variable -o image.png")

fails, as do the variants I have tried with "paste". Any suggestions gratefully received.

like image 899
Jonathan Burley Avatar asked May 18 '12 11:05

Jonathan Burley


2 Answers

Let's say we have the variable x that we want to pass on to dmtxwrite, you can pass it on like:

x = 10
system(sprintf("dmtxwrite %s -o image.png", x))

or alternatively using paste:

system(paste("dmtxwrite", x, "-o image.png"))

but I prefer sprintf in this case.

like image 179
Paul Hiemstra Avatar answered Nov 09 '22 20:11

Paul Hiemstra


Also making use of base::system2 may be worth considering as system2 provides args argument that can be used for that purpose. In your example:

my_r_variable <- "a"
system2(
    'echo',
    args = c(my_r_variable, '-o image.png')
)

would return:

 a -o image.png

which is equivalent to running echo in the terminal. You may also want to redirect output to text files:

system2(
    'echo',
    args = c(my_r_variable, '-o image.png'),
    stdout = 'stdout.txt',
    stderr = 'stderr.txt'
)
like image 23
Konrad Avatar answered Nov 09 '22 19:11

Konrad