[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