> On Jan 9, 2020, at 7:40 AM, Lipatz Jean-Luc <[email protected]> wrote:
>
> Hello,
>
> Is there a reason for the following behaviour?
>> mean(c("1","2","3"))
> [1] NA
> Warning message:
> In mean.default(c("1", "2", "3")) :
> l'argument n'est ni numérique, ni logique : renvoi de NA
>
> But:
>> var(c("1","2","3"))
> [1] 1
>
> And also:
>> median(c("1","2","3"))
> [1] "2"
>
> But:
>> quantile(c("1","2","3"),p=.5)
> Error in (1 - h) * qs[i] :
> argument non numérique pour un opérateur binaire
>
> It sounds like a lack of symetry.
> Best regards.
>
>
> Jean-Luc LIPATZ
> Insee - Direction générale
> Responsable de la coordination sur le développement de R et la mise en oeuvre
> d'alternatives à SAS
Hi,
It would appear, whether by design or just inconsistent implementations,
perhaps by different authors over time, that the checks for whether or not the
input vector is numeric differ across the functions.
A further inconsistency is for median(), where:
> median(c("1", "2", "3", "4"))
[1] NA
Warning message:
In mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]) :
argument is not numeric or logical: returning NA
as a result of there being 4 elements, rather than 3, and the internal checks
in the code, where in the case of the input vector having an even number of
elements, mean() is used:
if (n%%2L == 1L)
sort(x, partial = half)[half]
else mean(sort(x, partial = half + 0L:1L)[half + 0L:1L])
Similarly:
> median(factor(c("1", "2", "3")))
Error in median.default(factor(c("1", "2", "3"))) : need numeric data
because the input vector is a factor, rather than character, and the initial
check has:
if (is.factor(x) || is.data.frame(x))
stop("need numeric data")
Regards,
Marc Schwartz
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel