All, Is my function just plain wrong or is it just programming style? I use connections because SODA (software for data analysis) recommends using connections when working with serialized files.
First, after researching the use of return() - following Joshua's comment and others I found a post on SO regarding return(). http://stackoverflow.com/questions/11738823/explicitly-calling-return-in-a-function-or-not Second, Hadley's point regarding the use of RDS in gz function being a little strange. Following the help files the function is fashioned after the following which I found in R help files: ## Less convenient ways to restore the object ## which demonstrate compatibility with unserialize() con <- gzfile("women.rds", "rb") identical(unserialize(con), women) close(con) con <- gzfile("women.rds", "rb") wm <- readBin(con, "raw", n = 1e4) # size is a guess close(con) identical(unserialize(wm), women) With respect to the first, I understand why my function would be considered "buggy" - that can be fixed. It is the case, generally speaking, one does not need return() when programming in R; it is a functional language. However, some use return() and one finds return(value) in the R help files. Is it a strict no-no to use return()? With respect to the second, The function can be refactored and reduced to readRDS(). My question, is using gz file overkill or just plain wrong? What is considered "best practice"? -Glenn On Aug 09, 2015, at 09:04 AM, Joshua Ulrich <josh.m.ulr...@gmail.com> wrote: On Sun, Aug 9, 2015 at 8:59 AM, Glenn Schultz <glennmschu...@me.com> wrote: Hi All, I use connections to open and close data folders needed by my package. After each function closes I get the following warnings (depending on the connection that has been opened). 10: closing unused connection 3 (/Library/Frameworks/R.framework/Versions/3.2/Resources/library/BondLab/BondData/bondlabMBS4.rds) Below is the connection function that is related to the above warning: #------------------------------------------------------------------------------------ #' A connection function to BondData calling MBS cusps #' #' Opens a connection to the BondData folder to call MBS cusip data #' @param MBS.id A character string the MBS.id or cusip number current MBS.id is supported #' @export MBS <- function(MBS.id = "character"){ MBS.Conn <- gzfile(description = paste(system.file(package = "BondLab"), "/BondData/", MBS.id, ".rds", sep = ""), open = "rb") MBS <- readRDS(MBS.Conn) return(MBS) close.connection(MBS.Conn) } I have googled this warning and it seems to be triggered when a function terminates and the connection is open. But, I think the connection function closes the connection once the object is returned. What am I doing wrong? Your call to return() exits the function, so the close.connection() call is never evaluated. Considering using on.exit() to close the connection, since it will close the connection regardless of how the function exits (e.g. because of an error). -Glenn ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel -- Joshua Ulrich | about.me/joshuaulrich FOSS Trading | http://www.fosstrading.com ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel