########################## # Submit to Cluster Script ########################## # Sample script to create 20 directories, each with identical script files 'my_script.R' and 'my_script.sh'. # In addition, each directory receives a file 'node_var_df' with a data frame slice containing the specific # variables for each job. In the last step (2) the jobs are submitted to the nodes. # How to run this script: # (a) Have 'my_script.R' in current directory # (b) source("submit2cluster.txt") # (1) Create dir/file structure # Generate data frame 'node_var_df' that contains the variables for each job. The number of directories is defined by the # number of rows in this data frame node_var_df <- data.frame(index=1:length(seq(1.0, -0.9, by= -0.1)), from=seq(1.0, -0.9, by= -0.1), to=seq(0.9, -1.0, by= -0.1)) # Define character vector for creating shell script 'my_script.sh' shellv <- c("#!/bin/sh", "cd $PBS_O_WORKDIR", "R CMD BATCH --no-save my_script.R") # The following for loop generates the dir/file structure defined in 'node_var_df' for(i in 1:length(node_var_df[,1])) { system(paste("mkdir", paste("node_", node_var_df[i,1], sep=""))) # generates the different directories and names them by index column in node_var_df system(paste("cp", "my_script.R", paste("node_", node_var_df[i,1], sep=""))) # copies 'my_script.R' into each directory write.table(as.data.frame(node_var_df[i,]), paste("./node_", node_var_df[i,1], "/node_var_df", sep=""), quote=F, col.names = NA, sep="\t") # generates data frame slice containing the specific variables for each node write.table(as.data.frame(shellv), paste("./node_", node_var_df[i,1], "/my_script.sh", sep=""), quote=F, col.names=F, row.names=F) # generates a 'my_script.sh' file in each directory } # (2) Submits all jobs in one job. # Before you execute this, double-check if everything is set up correctly. # The number of jobs is again defined by the number of rows in # the data frame 'node_var_df' # for(i in 1:length(node_var_df[,1])) { # setwd(paste(getwd(), "/node_", node_var_df[i,1], sep="")) # system("qsub my_script.sh") # setwd("../") # }