数据对

概述

一个数据对包含了两个标量值。这两个标量值的数据类型必须相同。数据对是只有两个值的特殊的向量。

数据对类型的数据可用于:

(1) 代表数据范围。

数据范围不包含上限的有以下几种情况:

一是表示索引:

$ x=5 3 6 2;
$ x[1:3];
[3,6]
$ a=rand(1000.0,20000000)
$ b=a.subarray(0:1000000);
$ m=matrix(1 2 3 4, 5 6 7 8, 9 10 11 12);
$ m;

#0

#1

#2

1

5

9

2

6

10

3

7

11

4

8

12

$ m[1:2, 0:2];

#0

#1

2

6

二是表示 for-loop 的范围:

$ for(s in 1:3){print s};
1
2

三是在 bucketbucketCount 函数中:

$ bucket(4 0 1 3 2, 0:4, 2);
[,0,0,1,1]

其它情况下,数据范围均包含上限。

$ [5,6,8] between 1:6;
[1,1,0]

$ t1 = table(`A`A`B as sym, 09:56:06 09:56:07 09:56:06 as time, 10.6 10.7 20.6 as price)
$ t2 = table(take(`A,10) join take(`B,10) as sym, take(09:56:00+1..10,20) as time, (10+(1..10)\10-0.05) join (20+(1..10)\10-0.05) as bid, (10+(1..10)\10+0.05) join (20+(1..10)\10+0.05) as offer, take(100 300 800 200 600, 20) as volume)
$ wj(t1, t2, -5:0, <avg(bid)>, `sym`time);

(2) 表示矩阵的维度。比如"2:5"表示一个2乘5的矩阵。如果一个一维数组x有10个元素,x$2:5 表示把x转化为2乘5的矩阵,“$”表示转化。

(3) 创建 table 时指定容量和初始行数。

$ t=table(100:0, `date`sym`high`low`close, [DATE,SYMBOL,DOUBLE,DOUBLE,DOUBLE]);

创建数据对

使用冒号":"或者 pair 函数来创建数据对数据。

$ 1:3;

$ 3.4:7.8;

$ 1b:0b;
1:0
$ true:false;
1:0

$ 2013.06.13:2013.11.10;

$ 5 pair 6;
5:6

$ `Hello:`World;
"Hello" : "World"

访问数据对

用X[Y]的形式访问数据对数据。Y可以是整数也可以是整数向量,或者数据对。

$ x = 3:6;

$ x[1];
6

$ x[0 1];
[3,6]

修改数据对

$ x=3:6;

$ x[0]=4;
$ x;
4:6
// 数据对中的两个值可以分别被修改。

$ x=3:6+1;
$ x;
4 : 7
// 注意结果不是3:7。详见运算的定义。