26 December 2023

PDL

System: Slackware Linux (version 15.0)
CPUs: Intel(R) Core(TM) i5-3230M CPU @2.60GHz
GPU: Mesa DRI Intel(R) HD Graphics 4000
Deps: local-lib-2.000029.tar.gz

PDL and Statistics::R::IO for 2D grid inspection.

Useful on headless servers or in remote terminal environments.

https://slackbuilds.org/repository/15.0/perl/perl-local-lib/
local-lib-2.000029.tar.gz
perl-local-lib.tar.gz

bash-5.1# installpkg --terse perl-local-lib-2.000029-x86_64-1_SBo.tgz
perl-local-lib-2.000029-x86_64-1_SBo: create and use a local lib/ for perl modules ............... [ 190K]
bash-5.1#

Install PDL.

bash-5.1$ cat pdl.sh
#!/bin/sh

eval "$(perl -Mlocal::lib)"

export PDL_WITH_PROJ=0
export PDL_WITH_GD=0
export PDL_WITH_HDF=0
export PDL_WITH_NETCDF=0
export PDL_WITH_FFTW=0

cpan File::Map File::Which Sys::SigAction Test::Deep Test::Exception \
     Test::Warn PDL Term::ReadLine::Gnu PDL::IO::Browser Statistics::R::IO
bash-5.1$

Print trees class, structure and title.

bash-5.1$ Rscript -e 'print(class(trees)); str(trees)' | sed -n '2p'
'data.frame':   31 obs. of 3 variables:
bash-5.1$ Rscript - <<'EOF'
> db <- data(package="datasets")$results
> cat(db[db[, "Item"] == "trees", "Title"], "\n")
> EOF
Diameter, Height and Volume for Black Cherry Trees
bash-5.1$

Generate an .rds file.

bash-5.1$ Rscript -e 'saveRDS(as.matrix(trees), "trees.rds",
> compress = FALSE, version = 2)'
bash-5.1$

Load the .rds file for browsing.

bash-5.1$ cat cherries.pl
#!/usr/bin/perl

use strict;
use warnings;
use PDL;
use PDL::IO::Browser;
use Statistics::R::IO;

pdl(Statistics::R::IO::readRDS('trees.rds')->to_pl)
    ->reshape(31, 3)->transpose->browse;
bash-5.1$

Create a FastRaw data pair.

bash-5.1$ cat trees.pl
#!/usr/bin/perl

use strict;
use warnings;
use PDL;
use PDL::IO::FastRaw;
use Statistics::R::IO;

my $matrix = pdl(Statistics::R::IO::readRDS('trees.rds')->to_pl)
    ->reshape(31, 3)->transpose;

writefraw($matrix, 'trees');
bash-5.1$

Call this script on the binary; e.g. browse trees.

bash-5.1$ cat browse
#!/usr/bin/perl

use strict;
use warnings;
use PDL;
use PDL::IO::FastRaw;
use PDL::IO::Browser;

my $filename = $ARGV[0] or die "Usage: $0 <fastraw_basename>\n";

my $matrix = readfraw($filename);

$matrix->browse;
bash-5.1$

Create a .csv file for an MS® spreadsheet.

bash-5.1$ cat meyer.pl
#!/usr/bin/perl
# Forest Mensuration
# H. A. Meyer
# Penns Valley Publishers, Inc.

use strict;
use warnings;
use PDL;
use PDL::IO::Misc;
use Statistics::R::IO;

my $data = pdl(Statistics::R::IO::readRDS('trees.rds')->to_pl);

my $matrix = $data->reshape(31, 3);

wcols($matrix, 'prunus_serotina.csv', { COLSEP => ',' });
bash-5.1$