Ответ 1
Причина в том, что вы можете просто написать функцию печати, которая игнорировала значение параметра. Встроенные функции печати и форматирования используют значение options
по умолчанию.
Что касается второго вопроса, так как R использует арифметику с конечной точностью, ваши ответы не точны выше 15 или 16 знаков после запятой, поэтому в целом больше не требуется. Пакеты gmp и rcdd относятся к нескольким (через interace для библиотеки gmp), но это в основном связано с большими целыми числами, а не с более десятичными знаками для ваших удвоений.
Mathematica или Maple позволит вы должны дать столько десятичных знаков, сколько пожелает ваше сердце.
EDIT:
Возможно, было бы полезно подумать о разнице между десятичными знаками и значимыми цифрами. Если вы делаете статистические тесты, которые полагаются на различия, превышающие 15-ю значимую цифру, то ваш анализ почти наверняка является нежелательным.
С другой стороны, если вы просто имеете дело с очень маленькими числами, это не проблема, так как R может обрабатывать число, меньшее .Machine$double.xmin
(обычно 2e-308).
Сравните эти два анализа.
x1 <- rnorm(50, 1, 1e-15)
y1 <- rnorm(50, 1 + 1e-15, 1e-15)
t.test(x1, y1) #Should throw an error
x2 <- rnorm(50, 0, 1e-15)
y2 <- rnorm(50, 1e-15, 1e-15)
t.test(x2, y2) #ok
В первом случае различия между числами возникают только после многих значимых цифр, поэтому данные "почти постоянны". Во втором случае, хотя размер различий между числами одинаковый, по сравнению с величиной самих чисел они большие.
Как уже упоминалось в e3bo, вы можете использовать числа с плавающей запятой с несколькими точками, используя пакет Rmpfr
.
mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")
Это медленнее и интенсивнее использовать память, чем регулярные (двойная точность) векторы numeric
, но могут быть полезны, если у вас плохо обработанная проблема или нестабильный алгоритм.