?gzcon may help, depending exactly what you mean by `zlib-compressed
data'. If not, its code will provide you with a prototype to work on.
There are also private entry points in connections.c to (de)compress
blocks of data to/from a raw vector which again may be a useful statring
point for ideas.
There is no public API to the connections code.
On Wed, 8 Nov 2006, Simon Penel wrote:
> Dear R developers
>
> I am currently working on the seqinR package. The seqinR package
> allows a remote access to biological databases via a socket connection.
> We are using the functions socketConnection, writeLines and readLines
> to open the socket, send request to the server and receive response
> from the
> server respectively.
> Recently, a new function implemented in the socket server allows the
> server to send zlib-compressed data and we would like to use this
> function in R ( seqinR).
> Thus I have 2 questions about this.
> I did not found any R function dedicated to handle compressed data from
> a socket connection. My first question is : Is it possible that this
> function actually exist or
> that it will exist in the future ?
>
> Here there is an example of the R fonction we use, the first time with
> no compression, the second one with compression.
>
> Type 'demo()' for some demos, 'help()' for on-line help, or
> 'help.start()' for an HTML browser interface to help.
> Type 'q()' to quit R.
>
> > library(seqinr) # loading seqinr
> > choosebank("hoverprot") # choose the database ( this
operation will
> open the socketanknameSocket$socket )
> > query("toto","k=btg@") # do a query ( it means :
give me the
> sequences associated to the keywords begining with btg, save the list in
> toto)
> > socket <- banknameSocket$socket # here I save the socket in
"socket"
> >
>
request="extractseqs&lrank=2&format=\"fasta\"&operation=\"simple\"&zlib=F"
> # writing a request
> > #( it means : give me the sequence information of the list of rank 2
> ( toto) in fasta format, no compressed
> > writeLines(request, socket, sep = "\n") # put the request
into the
> socket
> > seq <- readLines(socket , n = -1) # read the answer of the socket
> server: it works, seq object contains the socket answer with sequence data
>
> >
>
request="extractseqs&lrank=2&format=\"fasta\"&operation=\"simple\"&zlib=T"
> # now I try with zlib compression on
> > writeLines(request, socket, sep = "\n") #
> > seq <- readLines(socket , n = -1) # it doesno work
> Warning message:
> incomplete final line found by readLines on
'->pbil.univ-lyon1.fr:5558'
> >
>
>
> Finaly I begin to create a C interface to get the compressed data from
> the server. However I am wondering how I can pass a opened socket as
> argument
> to the C interface, especially which R type defined in C I should use
> to handle this. Should I use the structure Rconn defined in
> Rconnection.h ? It seems to me that I may finally have to write a
> modified version of the C function readLines, but I think this not the
> best solution. This my second question....
>
>
> I hope this mail is not irrelevant, thanks for any help about these
> questions
> All the best,
>
> Simon
>
>
>
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595