# R script that produces histograms from benchmarked values
-
# Can be called from the bash script with the following code:
# export R_INPUT=$inputfile
# export R_OUTPUT=$outputfile
# export R_TYPE=$hist_type
-# R CMD BATCH $this_script.R
-#or
-# Rscript $this_script.R
+# R CMD BATCH $this_script.R or Rscript $this_script.R
-# Use functions from bench.h to benchmark execution time of the desired block,
-# then Rhist.R script to read all timings and produce histograms
-# and finally inject.h to inject values instead of executing block
+# Use functions from bench.h to benchmark execution time of the desired block, then Rhist.R script to read all timings
+# and produce histograms and finally inject.h to inject values instead of executing block
# This is a small function to help merging empty nbins for dhist histograms
-merge_empty_bins <- function (h)
-{
+merge_empty_bins <- function (h){
i<-1
j<-1
counts2<--1
breaks2<-h$breaks[1]
if (length(h$counts)>1)
- for(i in 1:(length(h$counts)-1))
- {
- if(h$counts[i]!=0 || h$counts[i+1]!=0)
- {
- counts2[j]<-h$counts[i]
- breaks2[j+1]<-h$breaks[i+1];
- j<-j+1
- }
+ for(i in 1:(length(h$counts)-1)){
+ if(h$counts[i]!=0 || h$counts[i+1]!=0){
+ counts2[j]<-h$counts[i]
+ breaks2[j+1]<-h$breaks[i+1];
+ j<-j+1
}
+ }
counts2[j]<-h$counts[length(h$counts)]
breaks2[j+1]<-h$breaks[length(h$breaks)]
outputfile<-Sys.getenv("R_OUTPUT")
type<-Sys.getenv("R_TYPE")
-if (!(type %in% c("mean","default","sturges","scott")))
- {
- stop("Wrong histogram type")
- }
+if (!(type %in% c("mean","default","sturges","scott"))){stop("Wrong histogram type")}
df<-read.table(inputfile,header=F)
df<-df[,c(1,4)]
names(df)<-c("NAME","TIME")
attach(df)
-for(i in unique(NAME))
-{
+for(i in unique(NAME)){
vector1<-df[NAME==i,2]
-
- if (length(vector1)==1)
- {
- #If there is only one element
- h$breaks<-c(vector1,vector1)
- h$counts<-1
- }
- else
- {
- if (type=="mean")
- #Mean value only
- h$breaks<-c(mean(vector1),mean(vector1))
- h$counts<-length(vector1)
- else
- if (type=="default")
- #Standard HISTOGRAM:
- h<-hist(vector1)
- else
- {
- #Dhist:
- h<-dhist(vector1,nbins=type, plot = FALSE, lab.spikes = FALSE, a=5*iqr(vector1), eps=0.15)
- h$breaks<-h$xbr
- h$count<-as.vector(h$counts)
- h$counts<-h$count
- h<-merge_empty_bins(h)
- }
- }
+ if (length(vector1)==1){
+ #If there is only one element
+ h<-hist(vector1) # Just for R compatibility reasons
+ h$breaks<-c(vector1,vector1)
+ h$counts<-1
+ } else {
+ if (type=="mean"){
+ #Mean value only
+ h<-hist(vector1) # Just for R compatibility reasons
+ h$breaks<-c(mean(vector1),mean(vector1))
+ h$counts<-length(vector1)
+ } else
+ if (type=="default")
+ #Standard HISTOGRAM:
+ h<-hist(vector1)
+ else {
+ #Dhist:
+ h<-dhist(vector1,nbins=type, plot = FALSE, lab.spikes = FALSE, a=5*iqr(vector1), eps=0.15)
+ h$breaks<-h$xbr
+ h$count<-as.vector(h$counts)
+ h$counts<-h$count
+ h<-merge_empty_bins(h)
+ }
+ }
cat(i, file = outputfile, sep = "\t", append = TRUE)
cat("\t", file = outputfile, append = TRUE)