Читая документацию по языку R, as.integer
больше относится к тому, как хранится число, чем если оно практически эквивалентно целому числу. is.integer
проверяет, объявлено ли число как целое число. Вы можете объявить целое число, поставив L
после него.
> is.integer(66L)
[1] TRUE
> is.integer(66)
[1] FALSE
Также такие функции, как round
, будут возвращать объявленное целое число, что вы и делаете с x==round(x)
. Проблема с этим подходом состоит в том, что вы считаете практически целым числом. В примере используется меньшая точность для проверки эквивалентности.
> is.wholenumber(1+2^-50)
[1] TRUE
> check.integer(1+2^-50)
[1] FALSE
Так что, в зависимости от вашего приложения, вы можете попасть в неприятности таким образом.