Hello Dear Monks I am a perl newbie. I am trying to calculate the jacknife average and error of each column in a multi-column file. My example data file look like this:
$ cat data.HW2 1.1 2.1 3.1 4.1 1.2 2.2 3.2 4.2 1.3 2.3 3.3 4.3 1.4 2.4 3.4 4.4
My attempted solution is to define arrays that will eventually be the size same as the number of columns (in this case 4) and iterate over them line by line:
cat jackkinfe.pl #! /usr/bin/perl use warnings; use strict; my @n=0; my @x; my $j; my $i; my $dg; my @x_jack; my @x_tot=0; my $cols; my $col_start=0; # read in the data while(<>) { my @column = split(); $cols=@column; foreach my $j ($col_start .. $#column) { $x[$n[$j]][$j] = $column[$j]; $x_tot[$j] += $x[$n[$j]][$j]; $n[$j]++; } } # Do the jackknife estimates for ($j=$col_start; $j<$cols; $j++) { for ($i = 0; $i < $n[$j]; $i++) { $x_jack[$i][$j] = ($x_tot[$j] - $x[$i][$j]) / ($n[$j] - 1); } # Do the final jackknife estimate my @g_jack_av=0; my @g_jack_err=0; for ($i = 0; $i < $n[$j]; $i++) { $dg = $x_jack[$i][$j]; $g_jack_av[$j] += $dg; $g_jack_err[$j] += $dg**2; } $g_jack_av[$j] /= $n[$j]; $g_jack_err[$j] /= $n[$j]; $g_jack_err[$j] = sqrt(($n[$j] - 1) * abs($g_jack_err[$j] - $g_jack_ +av[$j]**2)); printf "%e %e ", $g_jack_av[$j], $g_jack_err[$j]; } printf "\n";
It gives me the following two warnings:
$cat data.HW2 | perl jackknife.pl Use of uninitialized value within @n in array element at cols_jacknife +.pl line 19, <> line 1. Use of uninitialized value within @n in array element at cols_jacknife +.pl line 20, <> line 1.
It is complaining at the following two lines:
$x[$n[$j]][$j] = $column[$j]; $x_tot[$j] += $x[$n[$j]][$j];
But I want to set the size of @n dynamically depending on the size of the data file. How do I remove this warning? Any other suggestions on my perl usage are also welcome and much appreciated since I am trying to learn the best practices.

In reply to Calculate jackknife error from of each column of a multi-column file by pyari_billi

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.