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

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to