[R] Plotting C++ output in R

Andrew.Cox at lshtm.ac.uk Andrew.Cox at lshtm.ac.uk
Thu Apr 16 15:57:55 CEST 2009


Hi,

Using R 2.8.0 on Windows,

I have a mathematical model written in C++, the model writes to file (.txt) a set of numbers I want to plot in R.
The model iterates over about 10,000 runs, each time overwriting  the old with the new set of results to the output file.

I want to be able to continuously plot the output from the model in R each time a new run generates data.

At the moment I tried cheating a little by creating a continuous loop which constantly scans another output file from the model which contains the current run number, when the run number changes, R then goes on to plot  the new C++ output.

The 'Quick' code I tried which works to a certain extent, although very bad idea I am sure,
The idea is I strt R first and then run the C++ Model

#Make sure the C++ run number output file is zeroed
write.table(0, file = "C://rdata//Outfile5.txt",quote = F, row.names = F,col.names = F)
 
#Set up legend and colors
leg.txt<-c("Male Younger", "Male Older", "Female Younger", "Female Older")
leg.cols<-c("cyan","blue","pink","magenta")

#The number of runs for the C++ model
runs=10000 

#Loop corresponding to the number of runs in the C++ model
for(i in 1:runs){ 
# set / reset the plot variable to 0 (no plotting)
			plot<-0 
#read the current run number from the C++ model
			nogo<-read.table("c:\\rdata\\Outfile5.txt",header=F)
#This loop tries to implement a continuous scan of the C++ output file containing the current run number
          		for(i in 1:1000){ 
# Reads the current run number from the C++ file
  						go<-read.table("c:\\rdata\\Outfile5.txt",header=F) 
 #Tried to make a continuous loop by reseting i from the for loop to 1 again (which doesnt work)
						i<-1
#Pause the whole thing for a while
						Sys.sleep(0.2) 
# If the C++ model run number has been updated
						if(go==nogo+1)
						{
# Set the I from the for loop to max so we get an exit
							i<-1000
# set plot variable to 1 (Plot)
							plot<-1 
						}
					}
#If the plot variable is one indicating plot the data
		if(plot==1){ 
#read the C++ model output for this run
				data<-read.table("c:\\rdata\\Outfile3.txt") 
#Plot the data				
				plot(data[1:41,2],data[1:41,3],type="l",ylim=c(0,0.3),col="cyan",xlab="Years",ylab="Proportion HIV Infected",lwd=2)
				legend(x=0,y=0.08,leg.txt,fill = leg.cols)
				lines(data[1:41,2],data[1:41,4],col="blue",lwd=2)
				lines(data[1:41,2],data[1:41,5],col="pink",lwd=2)
				lines(data[1:41,2],data[1:41,6],col="magenta",lwd=2)

				}

		}




Hope I am making sense in my question (If not in my code).

Any help welcome.

Many thanks

Andrew Paul Cox
Mathematical Modeller
London School of Hygiene and Tropical Medicine
WC1E 7HT




More information about the R-help mailing list