[R] How is a file descriptor stored ?

William Dunlap wdunlap at tibco.com
Wed Aug 7 16:31:19 CEST 2013


> Use
> 
> assign(key, file( key, "w" ), envir=cpufile)
> 
> In your assign expression you are assigning cpufile to the third formal argument which is
> pos.
> You meant the envir argument, I presume.

Or use the syntax
    cpufile[[key]] <- file(key, "w")
instead of
    assign(key, file( key, "w" ), envir=cpufile)
The former works for lists and environments and corresponds to your
later usage of
     listoffiles[[key]]
to retrieve the data.

>From what I've seen of your example, a list might be a better way to
store your data, because of its copy-on-write semantics and because
it doesn't keep a parent environment in memory.  By using
'[[' instead of 'get' and 'assign' you minimize the number of changes
required to switch between a list and an environment.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Berend Hasselman
> Sent: Wednesday, August 07, 2013 4:10 AM
> To: mohan.radhakrishnan at polarisft.com
> Cc: r-help at r-project.org
> Subject: Re: [R] How is a file descriptor stored ?
> 
> 
> On 07-08-2013, at 12:13, mohan.radhakrishnan at polarisft.com wrote:
> 
> >
> > Hi,
> >        I thought that 'R' like java will allow me to store file names
> > (keys) and file descriptors(values) in a hashmap.
> >
> >
> > filelist.array <- function(n){
> >  sink("nmon.log")
> >  cpufile <- new.env(hash=T, parent=emptyenv())
> >  for (i in 1:n) {
> >    key <- paste("output", i, ".txt", sep = "")
> >    assign(key, file( key, "w" ), cpufile)
> >  }
> >    sink()
> >   return (cpufile)
> > }
> >
> > But when I try to test it like this there is an exception
> >
> > [1] "Exception is  Error in UseMethod(\"close\"): no applicable method for
> > 'close' applied to an object of class \"c('integer', 'numeric')\"\n"
> >
> > test.simple.filelist.array <- function() {
> >
> >    execution <- tryCatch({
> > 		sink("nmon.log")
> > 		listoffiles <- filelist.array(3)
> > 		for (v in ls(listoffiles)) {
> > 			print(paste("Map value is [", listoffiles[[v]], "]"))
> > 			fd <- listoffiles[[v]]
> > 			close(fd)
> > 		}
> >        sink()
> > 	}, error = function(err){
> > 		print(paste("Exception is ",err))
> > 	})
> > }
> >
> > I think I am missing some fundamentals.
> >
> 
> Read the help page for assign more carefully.
> Use
> 
> assign(key, file( key, "w" ), envir=cpufile)
> 
> In your assign expression you are assigning cpufile to the third formal argument which is
> pos.
> You meant the envir argument, I presume.
> 
> Berend
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list