> 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-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of Berend Hasselman > Sent: Wednesday, August 07, 2013 4:10 AM > To: mohan.radhakrish...@polarisft.com > Cc: r-help@r-project.org > Subject: Re: [R] How is a file descriptor stored ? > > > On 07-08-2013, at 12:13, mohan.radhakrish...@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@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. ______________________________________________ R-help@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.