knitr::opts_chunk$set(echo = TRUE)
library(validate)
library(validatetools)

1

de functie validator werkt niet goed bij negatieve waarden in de rhs.
validator(x< -10,x< -11)
 Object of class 'validator' with 0 elements:
 Warning message:
 In ini_validator(.self, ..., .file = .file, .data = .data) :
 Invalid syntax detected, the following expressions have been ignored:
 [001] x <- 10
 [002] x <- 11

Dit is, zoals Mark aangaf, niet reproduceerbaar:

validator(x< -10,x < -11)

NB: het is i.h.a. beter om spaties te gebruiken rond operatoren. (dat verhoogt de leesbaarheid en voorkomt fouten), dus liever de volgende syntax:

validator(x < -10, x < -11)

2

de functies detect_boundary_num, detect_fixed_values en detect_redundancy geven gewoon output 
voor een infeasible probleem. Dat lijkt me niet wenselijk.

Goed opgemerkt dat er niet gecheckt wordt op infeasiblity. Is nu aangepast:

detect_fixed_values(validator(x > 1, x <= 1, y>= 0, y < 0))

Geeft nu:

Error: This rule set is infeasible. Please fix and repair the rule set before continuing.

Wat betreft je opmerking over de fixed value van y: je rule set heeft twee tegenstrijdigheden: er is ook geen fixed value voor y!.

In onderstaand geval is het resultaat onjuist
    detect_redundancy(validator(x==0, y==1, x<1))
    V1    V2    V3 
FALSE FALSE  TRUE       

Volgens mij niet: de derde regel is redundant: hij wordt geimpliceerd door de specifiekere eerste regel (x == 0)

rules <- validator(x == 0, y == 1, x < 1)
detect_redundancy(rules)
remove_redundancy(rules)

Kortom: check for feasiblity is toegevoegd, andere twee issues zijn volgens mij correct gedrag.

3

Functie detect_boundary_num geeft een upper bound van 1.00e+07 voor een variabele die in een if-then constraint voorkomt. Als de conditionele regel wordt weggelaten dan is de upper bound "INF".   
        detect_boundary_num(validator(myrule1 = x > 1, myrule2 = y<1 , myrule3= if(x>0) y>0 ))
               variable  lowerbound upperbound
                x        x 1.001000000   1.00e+07
                y        y 0.001000001   9.99e-01

Goed opgemerkt! Is een tricky gevalletje: het wordt veroorzaakt door de conditionele regel die herschreven wordt m.b.v. een grote constante $M$, die in ons geval standaard de waarde 1e7 heeft. Wellicht is het goed om de gebruiker de optie te geven om deze constante te behandelen alsof het een Inf is. Suggesties?

feature request

4

Functie detect_fixed_values geeft foutieve output voor een conditionele regel
        detect_fixed_values( validator( m4= if(z>0)y<=2, m5 = if(z>0)y>=2, m6= z>4)) 
            geen output. Ik verwacht echter dat y=2 een fixed value is.

Als ik deze regel uitvoer krijg is een fixed value voor y met de waarde 2. Kun je het reproduceren?

detect_fixed_values( validator( m4 = if (z > 0) y <= 2
                              , m5 = if (z > 0) y >= 2
                              , m6 = z > 4)
                   ) 

5

Functie detect_fixed_values geeft een foutmelding voor een conditionele regel
        simplify_fixed_values(validator(if (z==0) y==0, z==0))
                Error in invert_(e) : == not supported

Dit wordt op dit moment nog niet ondersteund in deze syntax, maar kan wel op de volgende wijze geschreven worden:

simplify_fixed_values(validator(if (z == 0) y==0, z==0))

6

Functie Detect_redundancy geeft een foutief resultaat bij conditionele regels en een warning
        detect_redundancy(validator(x > 1,  y > 3,  if(x>0) y>2))
             V1    V2    V3 
            FALSE  TRUE FALSE 
            Warning message:
            In dnf_set[i] <- negated_rules :  number of items to replace is not a multiple of replacement length
        De tweede regel is niet overbodig, maar de derde wel
detect_redundancy(validator(x > 1,  y > 3,  if(x>0) y > 2))
remove_redundancy(validator(x > 1,  y > 3,  if(x>0) y > 2))

7

Detect_redundancy werkt niet voor constraints van het type "<="  and ">=" 
        detect_redundancy(validator(x<=1))
            Error in FUN(X[[i]], ...) : Invalid expression
        detect_redundancy(validator(x>=1))
            Error in FUN(X[[i]], ...) : Invalid expression  

Vreemd: bij mij werkt dit gewoon wel... Kun je dit reproduceren? Zo ja, kun je dat voorbeeld opsturen?

detect_redundancy(validator(x<=1))
detect_redundancy(validator(x >= 1))

8

    Detect_redundancy werkt niet voor conditional constraints
        detect_redundancy(validator(if (z==0) z==10))
            Error in A[, v] : subscript out of bounds
            In addition: Warning message:
            In dnf_set[i] <- negated_rules :
            number of items to replace is not a multiple of replacement length
           detect_redundancy(validator(if (z<0) y<0))
            V1 
            FALSE 
            Warning message:
            In dnf_set[i] <- negated_rules :
            number of items to replace is not a multiple of replacement length

Deze regel strand nu (met feasiblity check) op dezelfde fout als 5 en 8. Is in essentie dezelfde fout als 8.

detect_redundancy(validator(if (z == 0) z==10))

9

Substitute_values werkt niet altijd zonder list als tweede argument
     substitute_values(validator(x<10),x=1)
            Error: This method needs a 'validator' object, but was given a 'numeric'.
         substitute_values(validator(x<10),list(x=1))
            Object of class 'validator' with 1 elements:
            .const_x: x == 1  

Klopt, dat is enkel waar voor x. Wellicht is het handiger om het eerste argument niet x te noemen maar .x.

feature change

10

subsitute_value geeft geen goede foutmelding als je vergeet te melden wat je wilt substitueren.
      substitute_values(validator(x>0))
        Error in names(eq_) <- paste0(".const_", names(.values)) : 
        'names' attribute [1] must be the same length as the vector [0]
substitute_values(validator(x>0))

Bug. Volgens mij is het gewenste gedrag dat de oorspronkelijke rule set teruggegeven wordt. Niets substitueren is gelijk aan de originele set.

11

Subsititute_values geeft foutief resultaat
     substitute_values(validator(if (x>0) y==4),list(x=1))
        Object of class 'validator' with 2 elements:
        V1      : abs(y - 4) < 0
        .const_x: x == 1
substitute_values(validator(if (x > 0) y == 4), list(x=1))

fixed in de laatste versie van validatetools.

12

Subsititute_values geeft foutief resultaat
    substitute_values(validator(if (x>0) y==4),list(y=4))
        Object of class 'validator' with 2 elements:
        V1      : x <= 0
        .const_y: y == 4
substitute_values(validator(if (x>0) y==4),list(y=4))

fixed in de laatste versie van validatetools

13

simplify_conditional geeft een foutief resultaat
         simplify_conditional(validator(if (x<0) y==2,y==2))
        Object of class 'validator' with 2 elements:
        V1: !(x < 0) | (abs(y - 2) < 0)
            V2: y == 2 
     nb: in 11) krijgen we een vergelijkbaar abs-statement.
simplify_conditional(validator(if (x<0) y==2, y==2))

fixed in de laatste versie: zelfde issue als 11.

14

simplify_conditional geeft een foutmelding
    simplify_conditional(validator(if (x<0) y==2,y<=2))
        Error in A[, v] : subscript out of bounds
simplify_conditional(validator(if (x < 0) y == 2, y <= 2))

bug laatste versie geeft wel een resultaat, maar niet het correcte: heeft te maken met de gelijkheid.

15

simplify_conditional doet niet waar het voor bedoeld is
    simplify_conditional(validator(if (z<10) x<2,z<=3))
        Object of class 'validator' with 2 elements:
        V1: !(z < 10) | (x < 2)
        V2: (z - 3) <= 0
simplify_conditional(validator(if (z<10) x<2,z<=3))

fixed in de laatste versie van validatetools.

16

simplify_conditional doet niet waar het voor bedoeld is
    simplify_conditional(validator(if (z<0) x<2,x<=1))
        Object of class 'validator' with 2 elements:
        V1: !(z < 0) | (x < 2)
        V2: (x - 1) <= 0
simplify_conditional(validator(if (z<0) x<2,x<=1))

fixed in de laatste versie van validatetools.



data-cleaning/validate.simplify documentation built on Oct. 11, 2023, 12:15 a.m.