take

Syntax

take(X, n)

Arguments

X is a scalar/vector/tuple/matrix/table.

n is an integer or a vector of integers.

Details

  • If X is a scalar (n must also be a scalar): Generates a vector containing n identical values of X.

  • If X is a vector or a tuple:

    • if n is a scalar: takes n elements from X sequentially. It can be left to right (if n > 0) or right to left (if n < 0). The result is a vector.

    • if n is a vector (must be of the same length as X): takes n[i] copies of X[i]. If n[i] <= 0, it skips X[i]. The result is a vector.

  • If X is a matrix or table:

    • if n is a scalar: It takes n rows of X sequentially, either from top to bottom (if n > 0) or bottom to top (if n < 0). The result is a matrix or table.

    • if n is a vector (must be of the same length as the number of rows in X): takes n[i] copies of the element at the i-th row of X. If n[i] <= 0, it skips the i-th row and takes no elements. The result is a matrix or table.

Examples

take(10,5);
// output
[10,10,10,10,10]

x=`IBM`C`AAPL`BABA;
take(x,10);
// output
["IBM","C","AAPL","BABA","IBM","C","AAPL","BABA","IBM","C"]
// sequentially and iteratively take 10 elements from vector x

x=3 5 4 6 9;
take(x,3);
// output
[3,5,4]


x=1..3;
x.take(10);
// output
[1,2,3,1,2,3,1,2,3,1]

take(1 2 3, 10);
// output
[1,2,3,1,2,3,1,2,3,1]


take(1,10);
// output
[1,1,1,1,1,1,1,1,1,1]
// an efficient way to generate a vector with default values.


x=take(1,0);
// return an empty INT VECTOR

x;
// output
[]

typestr x;
// output
FAST INT VECTOR


x=1..12$3:4;
take(x,2);
// output
[1,2]

take(x,-2);
// output
[11,12]

take(1..3,2 0 2)
// output
[1,1,3,3]

m=matrix(1 2 3, 4 5 6)
take(m,5)
// output
col1        col2
1   4
2   5
3   6
1   4
2   5

take(m, 0 2 1)
// output
col1        col2
2   5
2   5
3   6

t=table(1 2 3 as a, 4 5 6 as b)
take(t,-4)
// output
a   b
3   6
1   4
2   5
3   6

take(t, -2 2 1)
// output
a   b
2   5
2   5
3   6