Try this:


## 1
map <- list(A = '00', C = '01', G = '10', T = '11')
myStr <- 'GATTA'
paste(map[unlist(strsplit(myStr, NULL))], collapse = "")

## 2
cod <- "1000111100"
library(gsubfn)
strapply(cod, '[0-9]{2}')
names(map)[match(unlist(strapply(cod, '[0-9]{2}')), map)]

On Fri, Jan 9, 2009 at 1:50 PM, Gundala Viswanath <gundalav@gmail.com>wrote:

> Dear all,
>
> Does R has any function/package that can pack
> and unpack string into bit size?
>
> The reason I want to do this in R is that R
> has much more native statistical function than Perl.
>
> Yet the data I need to process is so large that it
> required me to compress it into smaller unit -> process it -> finally
> recover them back again into string with new information.
>
> In Perl the implementation will look like this:
> I wonder how can this be implemented in R.
>
> __BEGIN__
> my %charmap = (
>    A => '00',
>    C => '01',
>    G => '10',
>    T => '11',
> );
>
> my %digmap = (
>    '00'    => "A",
>    '01'    => "C",
>    '10'    => "G",
>    '11'    => "T",
> );
>
> my $string = 'GATTA';
> $string =~ s/(.)/$charmap{$1}/ge;
>
> my $compressed = pack 'b*', $string;
>
> print "COMP: $compressed\n";
> printf "%d bytes\n", length $compressed;
>
> my @data;
>
> # Store the compressed bit into array
> push @data, $compressed;
>
> # process the array
> foreach my $dat ( @data ) {
>
>   my $decompressed = unpack 'b*', $dat;
>   $decompressed =~ s/(..)/$digmap{$1}/ge;
>
>   print "$decompressed\n";
>   # or do further processing on $dat
> }
> __END__
>
>
> - Gundala Viswanath
> Jakarta - Indonesia
>
> ______________________________________________
> 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.
>



-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O

	[[alternative HTML version deleted]]


