[Rd] mean

Marc Schwartz m@rc_@chw@rtz @end|ng |rom me@com
Thu Jan 9 14:18:39 CET 2020


> On Jan 9, 2020, at 7:40 AM, Lipatz Jean-Luc <jean-luc.lipatz using insee.fr> 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



More information about the R-devel mailing list