Управление количеством десятичных разрядов в выводе печати в R
существует опция в R, чтобы получить контроль над цифровым дисплеем. Например:
options(digits=10)
предполагается дать результаты расчета в 10 цифр до конца R сессии. В файле справки R параметр definition for digits имеет следующий вид:
цифры: управляет количеством цифр для печати при печати числовых значений. Это только предположение. Действительное значение являются 1...22 по умолчанию 7
Итак, он говорит, что это только предложение. Что делать, если мне нравится всегда отображать 10 цифр, не более или менее?
мой второй вопрос: Что делать, если мне нравится отображать более 22 цифр, т. е. для более точных вычислений, таких как 100 цифр? Возможно ли это с базой R, или мне нужен дополнительный пакет/функция для этого?
Edit: благодаря предложению jmoy, я попробовал sprintf("%.100f",pi)
и он дал
[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"
что имеет 48 десятичные дроби. Это максимальный предел R может работать?
2 ответа:
причина, по которой это только предложение, заключается в том, что вы можете довольно легко написать функцию печати, которая игнорирует значение параметров. Встроенные функции печати и форматирования используйте
options
значение по умолчанию.что касается второго вопроса, поскольку R использует арифметику конечной точности, ваши ответы не точны за пределами 15 или 16 десятичных знаков, поэтому в целом больше не требуется. Элемент gmp и rcdd пакеты общаются с множественной точностью арифметика (через взаимодействие с библиотекой gmp), но это в основном связано с большими целыми числами, а не с большим количеством десятичных знаков для ваших двойников.
Mathematica или кленов позволит вам дать столько десятичных знаков, сколько вашей душе угодно.
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
векторы, но может быть полезно, если у вас есть плохо обусловленная проблема или нестабильный алгоритм.
если вы производите весь выход самостоятельно, вы можете использовать
sprintf()
, например,> sprintf("%.10f",0.25) [1] "0.2500000000"
указывает, что вы хотите отформатировать число с плавающей запятой с десятью десятичными точками (в
%.10f
thef
для поплавка и.10
указываются десять знаков после запятой).Я не знаю никакого способа заставить функции более высокого уровня R печатать точное количество цифр.
отображение 100 цифр не имеет смысла, если вы печатаете обычные номера R, поскольку лучшая точность, которую вы можете получить с помощью 64-разрядных двойников, составляет около 16 десятичных цифр (см.Машина$двойная.ЭПС в системе). Остальные цифры будут просто мусором.