From @ko@ty@h@k @end|ng |rom u||@edu  Sat Jan  4 22:35:23 2020
From: @ko@ty@h@k @end|ng |rom u||@edu (Scott Kostyshak)
Date: Sat, 4 Jan 2020 16:35:23 -0500
Subject: [Rd] [patch] add sanity checks to quantile()
In-Reply-To: <20190531052855.5zzdb2x7i4et3vyb@boogie>
References: <20190531052855.5zzdb2x7i4et3vyb@boogie>
Message-ID: <20200104213523.xl4v4772qtiqbe7o@tallinn>

On Fri, May 31, 2019 at 01:28:55AM -0400, Scott Kostyshak wrote:
> The attached patch adds some sanity checks to the "type" argument of
> quantile(). Output from the following commands show the change of
> behavior with the current patch:
> 
>   vec <- 1:10
>   quantile(vec, type = c(1, 2))
>   quantile(vec, type = 10)
>   quantile(vec, type = "aaa")
>   quantile(vec, type = NA_real_)
>   quantile(vec, type = 4.3)
>   quantile(vec, type = -1)
> 
> Current behavior (i.e., without the patch):
> 
>   > vec <- 1:10
>   > quantile(vec, type = c(1, 2))
>   Error in switch(type, (nppm > j), ((nppm > j) + 1)/2, (nppm != j) | ((j%%2L) ==  : 
>     EXPR must be a length 1 vector
>   In addition: Warning messages:
>   1: In if (type == 7) { :
>     the condition has length > 1 and only the first element will be used
>   2: In if (type <= 3) { :
>     the condition has length > 1 and only the first element will be used
>   3: In if (type == 3) n * probs - 0.5 else n * probs :
>     the condition has length > 1 and only the first element will be used
>   > quantile(vec, type = 10)
>   Error in quantile.default(vec, type = 10) : object 'a' not found
>   > quantile(vec, type = "aaa")
>   Error in type - 3 : non-numeric argument to binary operator
>   > quantile(vec, type = NA_real_)
>   Error in if (type == 7) { : missing value where TRUE/FALSE needed
>   > quantile(vec, type = 4.3)
>     0%  25%  50%  75% 100% 
>    1.0  2.5  5.0  7.5 10.0 
>   > quantile(vec, type = -1)
>     0%  25%  50%  75% 100% 
>      1    2    5    7   10 
> 
> 
> Behavior with the patch:
> 
>   > vec <- 1:10
>   > quantile(vec, type = c(1, 2))
>   Error in quantile.default(vec, type = c(1, 2)) : 
>     'type' must be of length 1
>   > quantile(vec, type = 10)
>   Error in quantile.default(vec, type = 10) : 
>     'type' must be an integer between 1 and 9
>   > quantile(vec, type = "aaa")
>   Error in quantile.default(vec, type = "aaa") : 
>     'type' must be an integer between 1 and 9
>   > quantile(vec, type = NA_real_)
>   Error in quantile.default(vec, type = NA_real_) : 
>     'type' must be an integer between 1 and 9
>   > quantile(vec, type = 4.3)
>   Error in quantile.default(vec, type = 4.3) : 
>     'type' must be an integer between 1 and 9
>   > quantile(vec, type = -1)
>   Error in quantile.default(vec, type = -1) : 
>     'type' must be an integer between 1 and 9
> 
> 
> Note that with the patch, quantile() gives an error in some cases where
> the current code does not. Specifically, the following two calls to
> quantile() do not give an error without the patch:
> 
>   quantile(vec, type = 4.3)
>   quantile(vec, type = -1)
> 
> Thus, this patch could cause current code to give an error. If it is
> desired, I could change the patch such that it only gives an error when
> current R gives an error (i.e., the only benefit of the patch would be
> better error messages), or I can change the patch to give a warning in
> these cases.
> 
> Scott
> 
> 
> -- 
> Scott Kostyshak
> Assistant Professor of Economics
> University of Florida
> https://people.clas.ufl.edu/skostyshak/
> 

Bump. For this type of patch proposal, is it better to use the
bug tracker?

Thanks,

Scott


-- 
Scott Kostyshak
Assistant Professor of Economics
University of Florida
https://people.clas.ufl.edu/skostyshak/



[Rd] [patch] add sanity checks to quantile()
Scott Kostyshak