> On Jan 9, 2020, at 7:40 AM, Lipatz Jean-Luc <jean-luc.lip...@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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel