'%oneobs =%{$ obs [1]};`中的哈希表示法

时间:2014-07-11 01:54:20

标签: perl

Statistics::Regression的文档中,添加观察的说明如下:    $ reg-> include(2.0,[1.0,3.0,-1.0]);

然后,只需对自己的数据运行回归:

my @obs;
observations are like: %oneobs= %{$obs[1]};
...
foreach my $obshashptr (@obs) { $reg->include( $_[1], $_[3] ); }

我对%oneobs= %{$obs[1]}感到困惑:这种符号是什么意思?此外,foreach my $obshashptr (@obs) { $reg->include( $_[1], $_[3] ); }在做什么?有人可以通过向我展示这两个声明在不止一行中做了什么来帮助吗?

似乎$_[1]是观察,$_[3]包含预测变量。所以,$_[3]是一个数组..

2 个答案:

答案 0 :(得分:2)

%{ }是哈希取消引用;其中的内容是对哈希的引用,并且该哈希的内容被分配给%oneobs

请参阅http://perlmonks.org/?node=References+quick+reference

答案 1 :(得分:1)

my @obs;是一个包含每个索引的哈希引用的数组。

run_regression("bivariate regression",  $obshashptr->{someY}, [ "const", "someX" ] );

这会调用run_regression子例程并传递3个参数。

现在检查子程序。

sub run_regression {
  my $reg = Statistics::Regression->new( $_[0], $_[2] );
  foreach my $obshashptr (@obs) { $reg->include( $_[1], $_[3] ); }
  $reg->print();
}

子例程采用@_数组中的参数(参见What is the meaning of @_ in Perl?)。然后创建$reg Statistics::Regression对象,并将2个参数传递给new方法。 $_[0]表示@_数组的第一个元素,在本例中为bivariate regression$_[2]表示第三个参数。

然后foreach行循环遍历数组并将数组索引处的值赋给$obshashptr,然后对于每次迭代的数组,您调用include Statistics::Regression方法并{你传递2个参数。第一个是@_的第二个索引处的值,第二个参数是@_的第四个索引处的值。

http://i.imgur.com/cCMv1OT.png