[R] How is a file descriptor stored ?

mohan.radhakrishnan at polarisft.com mohan.radhakrishnan at polarisft.com
Thu Aug 8 08:55:43 CEST 2013


Hi,

The file handling code sometimes throws this exception.


Error in UseMethod("close") :
  no applicable method for 'close' applied to an object of class "c
('integer', 'numeric')"

Is there a sample based on my code that I can test ? I want to extract the
file descriptors from the hashmap and close them. I think that is causing
the exception. Sometimes just closing - close(fd) - is causing this too.

Thanks,
Mohan



                                                                             
                                                                             
                                                                             
    RE: [R] How is a file descriptor stored ?                                
                                                                             
                                                                             
    William Dunlap                                                           
                   to:                                                       
                     Berend Hasselman, mohan.radhakrishnan at polarisft.com     
                                                         07-08-2013 08:01 PM 
                                                                             
                                                                             
                                                                             
                                                                             
    Cc:                                                                      
        "r-help at r-project.org"                                               
                                                                             
                                                                             
                                                                             
                                                                             





> 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.




This e-Mail may contain proprietary and confidential information and is sent for the intended recipient(s) only.  If by an addressing or transmission error this mail has been misdirected to you, you are requested to delete this mail immediately. You are also hereby notified that any use, any form of reproduction, dissemination, copying, disclosure, modification, distribution and/or publication of this e-mail message, contents or its attachment other than by its intended recipient/s is strictly prohibited.

Visit us at http://www.polarisFT.com



More information about the R-help mailing list