table

语法

table(X, [X1], [X2], .....)table(capacity:size, colNames, colTypes)

详情

  • 用法一:将单个或多个向量/矩阵/元组,或多个向量和元组的混合数据形式转换成表。
  • 用法二:创建一个固定数据类型的空表或初始化的表。

参数

第一种用法中,X, X1, X2 ... 可以是向量、数组向量、矩阵或元组。每个向量、元组、数组向量的长度,以及矩阵中每列长度都必须相同。当 Xk 是元组时:
  • 若 Xk 的元素是等长的向量,元组的每个元素将作为表的一列。元组的长度必须等于表的行数。

  • 若 Xk 包含不同类型或不等长元素,则将单独作为表的一列(列类型为 ANY),其每个元素将作为该列每行的元素值。Xk 的长度仍然必须和表的行数保持一致。

第二种用法中:
  • capacity 是正整数,表示建表时系统为该表分配的内存(以记录数为单位)。当记录数超过 capacity 时,系统首先会分配 capacity 1.2~2倍的新的内存空间,然后复制数据到新的内存空间,最后释放原来的内存。对于规模较大的表,此类操作的内存占用会很高。因此,建议建表时预先分配一个合理的 capacity

  • size 是整数,表示该表新建时的行数。若 size =0,创建一个空表。 若 size>0,则建立一个只包含 size 条记录的表,记录初始值如下:

    • BOOL 类型默认值为 false;

    • 数值类型、时间类型、IPADDR、COMPLEX、POINT 的默认值为 0;

    • Literal, INT128 类型的默认值为 NULL。

    注: 如果 colTypes 指定为数组向量, size 必须为0。
  • colNames 是一个向量,表示列名。

  • colTypes 是一个向量,表示每列的数据类型,支持数组向量类型和元组(ANY)类型。可使用表示数据类型的系统保留字或相应的字符串。

例子

第一种用法:

id=`XOM`GS`AAPL
x=102.1 33.4 73.6
table(id, x);
id x
XOM 102.1
GS 33.4
AAPL 73.6
table(`XOM`GS`AAPL as id, 102.1 33.4 73.6 as x);
id x
XOM 102.1
GS 33.4
AAPL 73.6
m=matrix(1 2, 3 4, 5 6);
m;
#0 #1 #2
1 3 5
2 4 6
table(m);
C0 C1 C2
1 3 5
2 4 6
m.rename!(1 2, `a`b`x);
m;
a b x
1 1 3 5
2 2 4 6
table(m);
a b x
1 3 5
2 4 6
x=1..6
y=matrix(11..16, 17..22)
z=(101..106, 201..206)
t=table(x,y,z)
t.rename!(`x`y1`y2`z1`z2);

t;
x y1 y2 z1 z2
1 11 17 101 201
2 12 18 102 202
3 13 19 103 203
4 14 20 104 204
5 15 21 105 205
6 16 22 106 206
元素类型相同且等长的元组将转换为多列(每个元素为一列),混合类型或元素长度不等的元组将转换为 ANY 类型的列:
id = 1 2 3
val = [[1,2,3], [4,5,6],[7,8,9]]
metrics = [`A,[2.2 3.2], 3.2]
t = table(id, val, metrics)

id

col1

col2

col3

metrics

1 1 4 7 A
2 2 5 8 ([2.2,3.2])
3 3 6 9 3.2

第二种用法:

table(100:5, `name`id`value, [STRING,INT,DOUBLE]);
name id value
0 0
0 0
0 0
0 0
0 0
table(100:5, `name`id`value, `STRING`INT`DOUBLE);
name id value
0 0
0 0
0 0
0 0
0 0
table(100:1, [`value], [DOUBLE]);
value
0