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, [email protected]     
                                                         07-08-2013 08:01 PM 
                                                                             
                                                                             
                                                                             
                                                                             
    Cc:                                                                      
        "[email protected]"                                               
                                                                             
                                                                             
                                                                             
                                                                             





> 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: [email protected] [mailto:[email protected]]
On Behalf
> Of Berend Hasselman
> Sent: Wednesday, August 07, 2013 4:10 AM
> To: [email protected]
> Cc: [email protected]
> Subject: Re: [R] How is a file descriptor stored ?
>
>
> On 07-08-2013, at 12:13, [email protected] 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
>
> ______________________________________________
> [email protected] 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

______________________________________________
[email protected] 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.

Reply via email to