MacQueen, Don
2018-Jun-13 20:21 UTC
[R] Calling r-scripts with arguments from other scripts, or possibly R programming conventions/style guide
When I want to run multiple scripts one after the other, and have variables created in a script be still in memory for use by a subsequent script, I normally create a master script (say, "runall.r") and it sources each of the others in turn. For example, my master script (runall.r) would look like this: ## master script (runall.r) source('script1.r') source('script2.r') source('script3.r') cat('[runall.r] Done\n') ## end of master script Then, optionally, I can pass command line arguments to runall.r and parse them before sourcing the other scripts. Since all three scripts are run in the same R session, all variables in memory when script1 finishes will be available to script2, and so on. If you want to have each of the scripts be executable (by which I mean you run them by typing their name at the command line in a Linux environment; I don't know how it's done in Windows) and have the results of script1 be used as command line arguments to script2 -- well, I'm sure it can be done, but I don't think R's way of doing things is conducive to this approach. If you want to go that route, look up the --save, --no-save, --restore, and --no-restore arguments to R scripts. See also the help page for Rscript [type help('Rscript') or ?Rscript at the R prompt] if you haven't already. In my opinion, there are pros and cons to William Dunlap's suggestion to embed everything in functions in a package. I do it either way, depending on various factors. I would suggest, however, that you wait until you have more R experience before trying that route. Incidentally, this construct: fileConn<-file("output.txt") writeLines(c(TotalDeviation, IndividualDeviation, RecenterPeriods), fileConn) close(fileConn) looks to me like it's more complex than needed. I would suggest cat( TotalDeviation, IndividualDeviation, RecenterPeriods, '\n', file='output.txt') -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 Lab cell 925-724-7509 ?On 6/12/18, 7:33 PM, "R-help on behalf of Sam Tuck" <r-help-bounces at r-project.org on behalf of STuck at nzsuperfund.co.nz> wrote: Hi All, I am new to R and am wondering if there is a way to pass arguments between rscripts. I have this working but have had to create a C# shell calling the scripts in sequence via windows scripting which enables command line arguments to get the necessary interaction. I'm wondering if I'm using an outdated program construction technique - I create r files like I would programme functions or reoccurring code snippets in C. It may be that r was not designed to create lots of little r script modules that interact via a master script? Ideally I'd like to call r scripts from other r scripts and have all the variables still in memory: For example I've been using RStudio Version 1.1.447 to programme and regression test my individual scripts,. Script Arg Script.R { # We are going to pass arguments into this script arguments <- commandArgs(trailingOnly = TRUE) #arguments[1] is double #arguments[2] is double #arguments[3] is double. if(length(arguments) <3) { stop("Not enough arguments, please supply 3, [% dbl}total deviation, [% dbl] individual deviation, [int] periods before recenter") } TotalDeviation <- as.numeric(arguments[1])/100 IndividualDeviation <- as.numeric(arguments[2])/100 RecenterPeriods <- as.numeric(arguments[3]) # We then manipulate some objects based on these inputs, but for this test we will output them to a file. fileConn<-file("output.txt") writeLines(c(TotalDeviation, IndividualDeviation, RecenterPeriods), fileConn) close(fileConn) } Script RunningScript.R { Arg Script.R 0.6 0.4 132 } To which I get Error: unexpected symbol in " Arg Script.R" When I use the script RunningScript.R { system(paste("Arg Script.R", 0.8, 0.4, 132)) } Nothing occurs (there is no output file created, but also no error) When I use RunningScript.R { commandArgs <- c(0.6,0.4,132) source("Arg Script.R') } I don't get any args passed into the file. Instead getting the error Not enough arguments, please supply 3, [% dbl}total deviation, [% dbl] individual deviation, [int] periods before recenter Thanks Sam Tuck ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.