Подтвердить что ты не робот

Какая разница между целым классом и числовым классом в R

Я хочу предисловие к этому, сказав, что я абсолютный новичок в программировании, поэтому, пожалуйста, извините, насколько это основной вопрос.

Я пытаюсь лучше понять "атомные" классы в R, и, возможно, это относится к классам программирования в целом. Я понимаю разницу между символьным, логическим и сложным классами данных, но я изо всех сил пытаюсь найти принципиальное различие между числовым классом и целым классом.

Скажем, что у меня есть простой вектор x <- c(4, 5, 6, 6) целых чисел, для него было бы целесообразно быть целым классом. Но когда я делаю class(x), я получаю [1] "numeric". Тогда, если я преобразую этот вектор в целочисленный класс x <- as.integer(x). Он возвращает тот же самый точный список чисел, кроме класса.

Мой вопрос в том, почему это так, и почему класс по умолчанию для целого числа является числовым классом, и каковы преимущества и недостатки того, что целочисленный набор является числовым вместо целого.

4b9b3361

Ответ 1

Существует несколько классов, которые сгруппированы вместе как "числовые" классы, 2 наиболее распространенные из которых являются двойными (для чисел с плавающей запятой с двойной точностью) и целыми числами. R будет автоматически конвертировать между числовыми классами, когда это необходимо, поэтому по большей части для случайного пользователя не имеет значения, сохраняется ли число 3 в виде целого числа или как двойное. Большая математика выполняется с использованием двойной точности, поэтому часто используется хранилище по умолчанию.

Иногда вам может потребоваться специально хранить вектор в виде целых чисел, если вы знаете, что они никогда не будут преобразованы в двойные (используемые в качестве значений идентификатора или индексации), поскольку целые числа требуют меньше места для хранения. Но если они будут использоваться в любой математике, которая преобразует их в двойные, то, скорее всего, будет проще всего сохранить их как удвоившиеся для начала.

Ответ 2

Прежде всего, вполне возможно успешно использовать R годами, и нет необходимости знать ответ на этот вопрос. R обрабатывает различия между (обычными) числами и целыми числами для вас в фоновом режиме.

> is.numeric(1)

[1] TRUE

> is.integer(1)

[1] FALSE

> is.numeric(1L)

[1] TRUE

> is.integer(1L)

[1] TRUE

(Помещение заглавной буквы "L" после целого числа заставляет его храниться как целое число.)

Как вы можете видеть, "целое число" является подмножеством "числовой".

> .Machine$integer.max

[1] 2147483647

> .Machine$double.xmax

[1] 1.797693e+308

Целочисленные значения составляют чуть более 2 миллиардов, тогда как другие цифры могут быть намного больше. Они могут быть больше, потому что они хранятся как числа с плавающей запятой двойной точности. Это означает, что число хранится в двух частях: показатель степени (как 308 выше, кроме как в основании 2, а не в базе 10), и "значимое" (как 1.797693 выше).

Обратите внимание, что is.integer - это не проверка того, есть ли у вас целое число, а проверка того, как хранятся данные.

Следует обратить внимание на то, что оператор двоеточия : возвращает целые числа, если начальная и конечная точки являются целыми числами. Например, 1:5 создает integer вектор чисел от 1 до 5. Вам не нужно добавлять букву L

> class(1:5)
[1] "integer"

Ссылка: https://www.quora.com/What-is-the-difference-between-numeric-and-integer-in-R

Ответ 3

Насколько я понимаю, мы не объявляем переменную с типом данных, поэтому по умолчанию R устанавливает любое число без L в качестве числа. Если вы написали:

> x <- c(4L, 5L, 6L, 6L)
> class(x)
>"integer" #it would be correct

Пример целого числа:

> x<- 2L
> print(x)

Пример Numeric (вроде как double/float из других языков программирования)

> x<-3.4
> print(x)

Ответ 4

это же его то же самое