39
39
# ' * `$settings` is a list of hyperparamter settings for this [Filter].
40
40
# ' @name Filter
41
41
# ' @family Filter
42
- # ' @examples
43
- # ' filter = Filter$new(id = "FilterLinearCorrelation", package = "stats",
44
- # ' feature_types = "numeric", task_type = "regr", settings = list())
45
- # '
46
42
NULL
47
43
48
44
# ' @export
49
45
Filter = R6Class(" Filter" ,
50
46
public = list (
51
47
id = NULL ,
52
- task = NULL ,
53
48
packages = NULL ,
54
49
feature_types = NULL ,
55
50
task_type = NULL ,
@@ -67,7 +62,7 @@ Filter = R6Class("Filter",
67
62
calculate = function (task , settings = self $ settings ) {
68
63
assert_task(task )
69
64
assert_feature_types(task , self )
70
- assert_filter(filter , task )
65
+ assert_filter(self , task )
71
66
assert_list(settings , names = " unique" )
72
67
require_namespaces(self $ packages )
73
68
@@ -77,26 +72,39 @@ Filter = R6Class("Filter",
77
72
self
78
73
},
79
74
80
- filter = function (abs , perc , threshold ) {
81
- assert_numeric(self $ filter_values )
82
- self $ filter_values = sort(self $ filter_values , decreasing = TRUE )
75
+ filter_abs = function (task , abs ) {
76
+ assert_count(abs )
77
+ assert_task(task )
78
+ if (is.null(self $ filter_values ))
79
+ stopf(" Filter values have not been computed yet" )
80
+ filter_n(self , task , abs )
81
+ },
83
82
84
- if ( abs ) {
85
- subs = abs
86
- } else if ( perc ) {
87
- subs = round(length( task $ feature_names ) * perc )
88
- } else if ( threshold ) {
89
- subs = length(which( self $ filter_values > threshold ))
90
- }
83
+ filter_perc = function ( task , perc ) {
84
+ assert_number( perc , lower = 0 , upper = 1 )
85
+ assert_task( task )
86
+ if (is.null( self $ filter_values ) )
87
+ stopf( " Filter values have not been computed yet " )
88
+ filter_n( self , task , round( task $ nrow * perc ))
89
+ },
91
90
92
- filtered_features = names(head(self $ filter_values , subs ))
93
- task $ clone(deep = TRUE )$ select(filtered_features )
91
+ filter_thres = function (task , threshold ) {
92
+ assert_number(threshold )
93
+ assert_task(task )
94
+ if (is.null(self $ filter_values ))
95
+ stopf(" Filter values have not been computed yet" )
96
+ filter_n(self , task , sum(self $ filter_values > threshold ))
94
97
}
95
98
)
96
99
)
97
100
101
+ filter_n = function (self , task , n ) {
102
+ filtered_features = names(head(self $ filter_values , n ))
103
+ task $ clone(deep = TRUE )$ select(filtered_features )
104
+ }
105
+
98
106
# ' @export
99
- as.data.table.Filter = function (x ) {
107
+ as.data.table.Filter = function (x , ... ) {
100
108
fv = x $ filter_values
101
109
if (is.null(fv ))
102
110
stopf(" No filter data available" )
0 commit comments