[Bioc-devel] programming note: return() is a function call

Martin Morgan martin.morgan at roswellpark.org
Mon Nov 14 11:37:04 CET 2016


An interested R-help thread (starting at 
https://stat.ethz.ch/pipermail/r-help/2016-November/443123.html) points 
out that return() is treated as a function by the R parser. This has 
some surprising consequences when it is used without parentheses, for 
instance

f0 = function(i)
     return (i + 1) * 2

f1 = function() {
     if (TRUE)
         return
     1
     2
}

 > f0(10)
[1] 11
 > f1()
[1] 2

Suspicious code in the Bioconductor archive includes

./AnnotationHubData/R/updateResources.R : 67           return ## recipe 
will download
./AnnotationHubServer/R/downloadAndUpdate.R : 351               return 
## recipe will do necessary downloading
./ChAMP/R/champ.reffree.R : 38           return
./CompGO/R/fullPipeline.R : 138                   return
./DiffBind/R/DBA.R : 1287         return
./DiffBind/R/helper.R : 372         return
./ensembldb/inst/shinyHappyPeople/server.R : 115               return
./ensembldb/inst/shinyHappyPeople/server.R : 126               return
./ensembldb/inst/shinyHappyPeople/server.R : 137               return
./immunoClust/R/meta.plot.R : 129       return
./immunoClust/R/meta.plot.R : 187       return

A funny false positive is along the lines of

     if (test) {
         stop("test failed")
         return
     }

where of course the (incorrect) return() is never reached.

Martin


This email message may contain legally privileged and/or...{{dropped:2}}



More information about the Bioc-devel mailing list