forked from kshedden/datareader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.go
99 lines (93 loc) · 1.83 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package datareader
import (
"fmt"
)
// StatfileReader is an interface that can be used to work
// interchangeably with StataReader and SAS7BDAT objects.
type StatfileReader interface {
ColumnNames() []string
ColumnTypes() []ColumnTypeT
RowCount() int
Read(int) ([]*Series, error)
}
func upcastNumeric(vector interface{}) ([]float64, error) {
switch vec := vector.(type) {
default:
return nil, fmt.Errorf("unknown type %T in upcast_numeric", vec)
case []float64:
return vec, nil
case []float32:
n := len(vec)
x := make([]float64, n)
for i := 0; i < n; i++ {
x[i] = float64(vec[i])
}
return x, nil
case []int64:
n := len(vec)
x := make([]float64, n)
for i := 0; i < n; i++ {
x[i] = float64(vec[i])
}
return x, nil
case []int32:
n := len(vec)
x := make([]float64, n)
for i := 0; i < n; i++ {
x[i] = float64(vec[i])
}
return x, nil
case []int16:
n := len(vec)
x := make([]float64, n)
for i := 0; i < n; i++ {
x[i] = float64(vec[i])
}
return x, nil
case []int8:
n := len(vec)
x := make([]float64, n)
for i := 0; i < n; i++ {
x[i] = float64(vec[i])
}
return x, nil
}
}
func castToInt(x interface{}) ([]int64, error) {
switch v := x.(type) {
default:
return nil, fmt.Errorf("cannot cast %T to integer", x)
case []int64:
return x.([]int64), nil
case []float64:
y := make([]int64, len(v))
for i, z := range v {
y[i] = int64(z)
}
return y, nil
case []float32:
y := make([]int64, len(v))
for i, z := range v {
y[i] = int64(z)
}
return y, nil
case []int32:
y := make([]int64, len(v))
for i, z := range v {
y[i] = int64(z)
}
return y, nil
case []int16:
y := make([]int64, len(v))
for i, z := range v {
y[i] = int64(z)
}
return y, nil
case []int8:
y := make([]int64, len(v))
for i, z := range v {
y[i] = int64(z)
}
return y, nil
}
}