我们以前的统计函数,只支持对于一维数组的处理,现在一并支持了对二维数组的处理,对行列操作的选择,移动统计,选择部分字段做统计等功能。
比如func(In1,In2...InN[,Out1,...OutN]),这类函数,In参数除支持二维数组外,还增加了五个可选参数func(In1,In2...InN[,Out1,...OutN][,Opt1[,Opt2[, Opt3[, Opt4[, Opt5]]]]])
Opt1:对列操作为0(默认),对行操作为1,可缺省(以下参数都是默认缺省的参数);
Opt2:是否移动进行计算,为0表示不移动(默认),其余正整数表示移动计算的长度;
Opt3:对字段筛选,nil表示全选(默认),可以使用数组进行多选,也可以使用简单类型进行单选
Opt4:异常处理参数,按照存储位来进行管理(默认为0):
第一位管理的是是否忽略字符串异常值,即1不报错,0报错。
第二位管理的是nil值是否报错,即1报错,0不报错。
第三位管的是计算移动长度的时候,nil值及字符串是否包括在内。即0不忽略,1忽略。
这样的话:
0表示一般处理(0b000),即字符串报错,nil值不报错,移动时异常值不忽略。
1表示(0b001)字符串不0报错,nil值不报错,移动时异常值不忽略。
2表示(0b010)与6表示(0b110)字符串报错,nil值报错。
3表示(0b011)字符串不报错,nil值报错,移动时异常值不忽略。
4表示(0b100)字符串报错,nil值不报错,计算移动单位时忽略nil值;
5表示(0b101)字符串与nil不报错,计算移动单位时忽略nil值和字符串值;
7表示(0b111)字符串不报错,nil值报错,计算移动单位时忽略字符串;
Opt5:当In为空数组时的返回值,该参数默认缺省为0。
常用统计量:以mean函数为例:
正常数据的处理:
a := array((1,2,3),(2,nil,4),(4,5,6)); //在一般的统计函数中,遇到nil是不会报错的
return mean(a); //对每一列求均值
return mean(a,1); //对每一行求均值
return mean(a,0,2); //求取长度为2的移动平均
return mean(a,0,2,array(0,1)); //只对0,1列做计算
return mean(a,0,2,array(0,1),4);
//比较和上一个返回,这里求移动均值时跳过了nil
含字符串异常数据
a := array((1,2,3),(2,nil,"a"),(4,5,6));
return mean(a,0,2,array(0,1),1);
//忽略含字符串元素时候的报错
return mean(a,0,2,array(0,1),1+4);
//比较和上一个返回,这里求移动均值时跳过了nil和字符串元素
空数组时候的默认输出:
Return mean(array(),0,0,nil,1,"默认输出值"); //输出第6个参数
一维数组的处理和n*1二维数组类似,注意第二个参数一般为0,移动平均还是一维数组,一般平均结果是实数。
a := rand(100);
return mean(a); //结果为实数
return mean(a,0,10); //长度为10的移动平均
次序统计量,以Large函数为例:
相比较统计函数的用法,次序统计函数主要要注意的是第二个不可缺省的参数的设置问题,比如:Large(Data:Array;N:[Int,Array]):[real,Array];
N是一个整数的时候
a := 1->10;
a |= a;
return _large(a,1); //这样可以得到每列最大的元素
N是一个一维数组的时候
a := rand(100,10);
return _large(a,1->10); //对列做的时候,N的长度必须和列数目一致
return _large(a,ones(100),1); //对行做的时候,N的长度必须和行数目一致