https://github.com/hadley/r-internals/blob/master/vectors.md says
Rboolean Rf_isNumber(SEXP); // INTSXP (but not factor), LGLSXP, REALSXP, CPLXSXP
Rboolean Rf_isNumeric(SEXP); // INTSXP (but not factor), REALSXP, CPLXSXP
but my experiments indicate the R-3.3.1's isNumeric returns TRUE for logical, integer, and real,
but not complex or factor or other types and that isNumber returns TRUE for logical, integer, real, and complex, but not for factor or other types. I.e., both accept LGLSXP but only isNumber accepts
CPLXSXP.
x isNumber isNumeric
Factor 1 FALSE FALSE
Logical TRUE TRUE TRUE
Integer 1 TRUE TRUE
Real 1.1 TRUE TRUE
Complex 1+1i TRUE FALSE
List 2, 1 FALSE FALSE
Character ABC FALSE FALSE
Name Joe FALSE FALSE
Expression expression({, }) FALSE FALSE
Call Func(Arg) FALSE FALSE
Just double checked with the source and you are indeed correct. CPLSXPs are not numeric, but they are numbers. This is consistent with is.numeric() in R:
https://github.com/hadley/r-internals/blob/master/vectors.md says Rboolean Rf_isNumber(SEXP); // INTSXP (but not factor), LGLSXP, REALSXP, CPLXSXP Rboolean Rf_isNumeric(SEXP); // INTSXP (but not factor), REALSXP, CPLXSXP but my experiments indicate the R-3.3.1's isNumeric returns TRUE for logical, integer, and real, but not complex or factor or other types and that isNumber returns TRUE for logical, integer, real, and complex, but not for factor or other types. I.e., both accept LGLSXP but only isNumber accepts CPLXSXP.
Factor 1 FALSE FALSE Logical TRUE TRUE TRUE Integer 1 TRUE TRUE Real 1.1 TRUE TRUE Complex 1+1i TRUE FALSE List 2, 1 FALSE FALSE Character ABC FALSE FALSE Name Joe FALSE FALSE Expression expression({, }) FALSE FALSE Call Func(Arg) FALSE FALSE