2010-02-18 2 views
77

숫자 디스플레이를 제어하려면 R에 옵션이 있습니다. 예를 들면 다음과 같습니다.인쇄 출력의 10 진수 제어 R

options(digits=10) 

은 R 세션이 끝날 때까지 10 자리로 계산됩니다. R의 도움말 파일에서 숫자 매개 변수에 대한 정의는 다음과 같습니다.

digits : 숫자 값을 인쇄 할 때 의 자릿수를 제어합니다. 제안 사항입니다. 유효한 값 기본적으로 1 ... 22 있습니다 7

그래서,이 단지 제안 말합니다. 10 자리 이상을 항상 표시하고 싶습니다.

두 번째 질문은 22 자리 이상을 표시하려는 경우, 즉 100 자리와 같은 더 정확한 계산을하려면 어떻게해야합니까? 베이스 R로 가능합니까? 아니면 추가 패키지/기능이 필요합니까?

편집 : jmoy의 제안에 덕분에, 나는 sprintf("%.100f",pi)을 시도하고 48 진수를 가지고
[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000" 

했다. R이 처리 할 수있는 최대 한도입니까? 실제로 pi에는 무한 수의 소수가 있습니다. 당신은 전체 출력을 직접 생산하는 경우

+4

pi의 처음 15 자리 만 정확합니다. 진정한 가치와 비교 http://joyofpi.com/pi.html –

+1

네 말이 맞아. R이 다른 이유는 무엇입니까? –

+3

R에 대한 FAQ보기 http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f –

답변

38

단지 제안 일 뿐이므로 옵션 값을 무시한 인쇄 기능을 쉽게 작성할 수 있습니다. 기본 제공 인쇄 및 서식 지정 기능은 options 값을 기본값으로 사용합니다.

두 번째 질문과 관련하여 R은 유한 정밀도 산술을 사용하므로 사용자의 답변이 소수점 이하 15 자리 또는 16 자리를 초과하여 정확하지 않으므로 일반적으로 더 많이 필요하지 않습니다. gmprcdd 패키지는 인터프리터 (interace)를 통해 gmp 라이브러리에 대한 다중 정밀도 산술 연산을 처리하지만, 이는 double 형의 소수 자리수가 아닌 큰 정수와 관련이 있습니다.

Mathematica 또는 Maple으로하면 마음껏 원하는 소수 자릿수를 제공 할 수 있습니다.

편집 :
소수점과 유효 숫자의 차이점을 생각하는 것이 유용 할 수 있습니다. 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 벡터를 사용하는 것이 많이 느리고 더 많은 메모리,하지만 당신은 잘못 조절 문제 나 불안정 알고리즘이있는 경우 유용 할 수 있습니다.

+3

[이 Rwiki 페이지] (http://rwiki.sciviews.org/doku.php?id=misc:r_accuracy:high_precision_arithmetic)는 [Rmpfr 패키지] (http : //cran.at.r-project. org/web/packages/Rmpfr/index.html)은 R. – e3bo

+0

에서 고정 소수점 부동 소수점 연산을 허용하지만 Rmpfr은 정밀도를 향상시키기 위해 모든 R 패키지에서 사용할 수 있습니까? 또는 내부적으로 코딩 된 기능 만 사용할 수 있습니까? – skan

+2

"15 번째 유효 숫자 이상의 차이점에 의존하는 통계 테스트를 수행하는 경우 분석 결과가 거의 확실하지 않습니다." 그러나 나는 그것이 쓰레기라고 결론을 내릴 수있는 자릿수가 무엇이 될지 궁금해했고, 나는 5라고 생각했다. 그러나 나는 정정을 기쁘게 생각한다. – PatrickT

29

, 당신은 내가 숫자의 정확한 숫자를 인쇄하는 R의 높은 수준의 기능을 강제로 어떤 방법을 모르는의 sprintf에게

> sprintf("%.10f",0.25) 
[1] "0.2500000000" 

를 사용할 수 있습니다.

R의 일반적인 숫자를 인쇄하는 경우 100 비트를 표시하는 것이 적합하지 않습니다. 64 비트 double을 사용하여 얻을 수있는 최상의 정확도는 약 16 자리입니다 (시스템에서 .Machine $ double.eps를보십시오). 나머지 숫자는 단지 쓰레기가 될 것입니다.

+0

사실, 제가 적용한 특수한 카이 제곱 테스트에서는 정확한 결과를 내기 위해 수백 개의 소수가 필요했습니다. 또한 pi에는 수천 개의 소수가 있습니다. 그래서 내가 약 100 자리 이상을 궁금해했다. –

+12

pi는 무한 수의 소수를가집니다. 그렇다고해서 컴퓨터에 저장할 수있는 것은 아닙니다. – Shane

+0

나는 이것이 Mathematica가 R보다 우수하다고 생각합니다. – skan