[R-pkg-devel] Working with connections - What is correct?
Dirk Eddelbuettel
edd at debian.org
Tue Aug 11 04:59:22 CEST 2015
On 11 August 2015 at 02:09, Glenn Schultz wrote:
| 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.
Nothing wrong with connections. Many of us use them.
| 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
Let's try once more. The function foo()
foo <- function() {
x <- 2
return(x)
x <- 3
}
will return what value? Ie what does 'print(foo())' show?
| 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:
IIRC what Hadley was trying to say what you do _not_ need to compress before
inserting into a rds file as the rds file format compresses by default.
In other words compression comes for free, and effortlessly so.
Hth, Dirk
| ## 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.ulrich at gmail.com> wrote:
|
| On Sun, Aug 9, 2015 at 8:59 AM, Glenn Schultz <glennmschultz at 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 at 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 at r-project.org mailing list
| https://stat.ethz.ch/mailman/listinfo/r-package-devel
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the R-package-devel
mailing list