Skip to content

Commit 1bb4bba

Browse files
committed
fix in rep_len and factor[$jsArray]
1 parent d18c4f2 commit 1bb4bba

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

index.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
//import { Renhance, $class, $attr, UseMethod, $matrix, $list, $vector, $default } from './src/s3';
22
import { gl } from './src/factor'
3+
import { $buildIn, $levels, $class } from './src/s3';
34

4-
const f = gl(4,3)
5-
6-
console.log(f)
5+
const l1 =gl(3,4, 16);
6+
const l2 = gl(3,4, 16, ['one', 'two', 'red', 'green'])
7+
console.log(l1)
8+
console.log(l2[$buildIn][$levels], l2[$buildIn][$class])

src/factor.ts

+14-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { promoteArray, flatten, unique, multiplexer } from './helpers';
2-
import { seq_len, repInt, isOrdered } from './public';
2+
import { rep_len, seq_len, repInt, isOrdered } from './public';
33
import { FactorType } from './types';
44
import { getLogger } from './logger';
55
import { Renhance, $jsArray, $class, $fact, $levels, $buildIn, UseMethod, $ordered } from './s3';
@@ -30,38 +30,39 @@ _factor[$jsArray] = function factorDefault(x: FactorType[], levels: FactorType[]
3030
}
3131

3232
const _levels = promoted.filter((v, i, arr) => v !== null && !arr.includes(v, i + 1));
33-
const flatLab = (labels !== levels) ? flatten(labels).map(v => promoCode(v)) : [];
33+
const flatLab = (labels !== levels) ? unique(flatten(labels)) : [];
3434

35-
if (flatLab.length && flatLab.length !== _levels.length) {
35+
if (flatLab.length && flatLab.length < _levels.length) {
3636
logger.errorAndThrow(Error, `invalid labels; length ${labels.length} should be 1 or ${_levels.length}`)
3737
}
3838

3939
// optional reformatting of data
4040
//
4141
if (flatLab.length) {
4242
//construct mapper
43-
const mapper = multiplexer(<any>flatLab, <any>_levels)
44-
((lab, lev) => [lev, lab])
43+
const mapper1 = multiplexer(<any>flatLab, <any>_levels)
44+
((lab, lev) => ({ lv:lev, la: lab}))
45+
const mapper2 = mapper1
4546
.reduce((coll: { [index: string]: any }, v) => {
46-
coll[v[0]] = v[1];
47+
coll[v.lv] = v.la;
4748
return coll;
4849
}, {} as { [index: string]: any });
4950

5051
for (let i = 0; i < promoted.length; i++) {
51-
const pi = mapper[<any>promoted[i]]
52+
const pi = mapper2[<any>promoted[i]]
5253
promoted[i] = pi;
5354
}
5455
}
5556

5657
const obj = Renhance(promoted, $buildIn);
57-
obj[$buildIn][$levels] = levels
58+
obj[$buildIn][$levels] = flatLab.length ? flatLab : _levels
5859
obj[$buildIn][$class] = ordered ? [$ordered, $fact] : [$fact]
5960

6061
return obj;
6162
}
6263

63-
export function gl(n: number, k: number, length: number = n * k, labels = seq_len(n), ordered = false) {
64-
const data = seq_len(repInt(seq_len(n), repInt(k, n)), length)
64+
export function gl(n: number, k: number, length: number = n * k, labels:FactorType[] = seq_len(n), ordered = false) {
65+
const data = rep_len(repInt(seq_len(n), repInt(k, n)), length)
6566
const fac = _factor(data, undefined, labels, undefined, ordered)
6667
return fac;
6768
}
@@ -70,7 +71,7 @@ export function gl(n: number, k: number, length: number = n * k, labels = seq_le
7071
### factors
7172
### levels
7273
```R
73-
base::gl #Generate factors by specifying the pattern of their levels._
74+
xx base::gl #Generate factors by specifying the pattern of their levels._
7475
base::Ops.ordered
7576
base::addNA
7677
base::[<-.factor
@@ -91,9 +92,9 @@ base::is.na<-.factor
9192
base::ordered
9293
base::all.equal.factor
9394
base::levels
94-
base::is.ordered
95+
xx base::is.ordered
9596
base::levels.default
96-
base::factor
97+
xx base::factor
9798
base::nlevels
9899
base::Summary.ordered
99100
base::as.ordered

src/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export function duplicates(input: any[]): any[] {
9797
}
9898

9999
export function unique(input: any[]): any[] {
100-
return input.filter((f, i, arr) => indexOf(f, i + 1, arr) !== -1);
100+
return input.filter((f, i, arr) => indexOf(f, i + 1, arr) === -1);
101101
}
102102

103103
export function promote(...args: FactorType[]) {

src/public.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
import { UseMethod, Rclass, /* $default, */ $ordered, $list, $df, $int, $string, $double, $logical, $jsArray, isR } from "./s3";
3+
import { UseMethod, Rclass, /* $default, */ $ordered, $list, $df, $int, $string, $double, $logical, $jsArray } from "./s3";
44
import { multiplexer } from './helpers';
55

66
function seq_len(length: number, offset = 1) {
@@ -43,7 +43,7 @@ rep_len[$jsArray] = function (x: any, length: number) {
4343
}
4444
rc = Array.from({ length });
4545
for (let i = 0; i < rc.length; i++) {
46-
rc[i] = x[i % length]
46+
rc[i] = x[i % x.length]
4747
}
4848
return rc;
4949
}

0 commit comments

Comments
 (0)