hadley / r-internals

Documentation for R's internal C API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Description of Rf_isNumeric doesn't match R-3.3.1

BillDunlap opened this issue · comments

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:

is.numeric(1 + 1i)
#> [1] FALSE