인쇄 출력의 10진수(R) 수 제어
R에는 숫자 표시를 제어하는 옵션이 있습니다.예:
options(digits=10)
R 세션이 끝날 때까지 계산 결과를 10자리로 제공해야 합니다.R의 도움말 파일에서 digits 파라미터의 정의는 다음과 같습니다.
digits: 숫자 값을 인쇄할 때 인쇄할 자릿수를 제어합니다.그것은 단지 제안일 뿐입니다.유효한 값은 1...22(기본값 7)
그래서, 이것은 단지 제안일 뿐입니다.더 많거나 덜하지 않고 항상 10자리를 표시하려면 어떻게 해야 합니까?
두 번째 질문은 22자리 이상을 표시하려면 어떻게 해야 합니까? 즉, 100자리와 같은 보다 정확한 계산을 위해?Base R로 가능한가요, 아니면 추가 패키지/기능이 필요한가요?
편집 : jmoy의 제안 덕분에 노력했습니다.sprintf("%.100f",pi)그리고 그것은 주었습니다.
[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"
소수점 48자리입니다.이것이 R이 처리할 수 있는 최대 한도입니까?
이것이 단지 제안일 뿐인 이유는 옵션 값을 무시한 인쇄 함수를 쉽게 작성할 수 있기 때문입니다. 및 은 내된인포기은을 합니다.options값을 기본값으로 지정합니다.
두 번째 질문은 R이 유한 정밀도 산술을 사용하기 때문에 소수점 이하 15~16자리 이상으로 정확하지 않기 때문에 일반적으로 더 많은 것이 필요하지 않습니다.gmp 및 rcdd 패키지는 (gmp 라이브러리에 대한 인터페이스를 통해) 여러 정밀 산술을 처리하지만, 이는 대부분 2배에 대한 소수점 이상보다는 큰 정수와 관련이 있습니다.
Mathematica나 Maple은 여러분의 심장이 원하는 만큼 소수점을 줄 수 있게 해줄 것입니다.
소수점과 유의한 숫자 사이의 차이에 대해 생각해 보는 것이 유용할 수 있습니다.유의한 15번째 수치를 초과하는 차이에 의존하는 통계 검정을 수행하는 경우 분석은 거의 확실하게 정크가 됩니다.
은 반에만, , 숫숫을은자약작, 다수룰문다덜있니, 을들입제때그것은에기문면자은루들고은우지이신▁as▁small▁on▁as▁number,▁r▁handle▁r▁can▁numbers,다▁of▁problem▁if▁since▁small▁you▁is문▁with니와 같은 작은 숫자를 다룰 수 있기 때문에 문제가 덜합니다..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"
부동 소수점 숫자를 10개의 소수점으로 형식을 지정합니다(단위:%.10f그f플로트와 그를 위한 것입니다..1010개의 소수점을 지정합니다.
저는 R의 상위 레벨 기능이 정확한 숫자를 인쇄하도록 강제하는 방법을 모릅니다.
64비트 더블을 사용하여 얻을 수 있는 최고의 정확도는 십진수 16자리이므로 R의 일반 숫자를 인쇄하는 경우 100자리를 표시하는 것은 의미가 없습니다( 참조).시스템의 시스템 $double.eps)입니다.나머지 숫자들은 그냥 정크일 뿐입니다.
필요에 따라 인쇄할 소수 자릿수를 제어할 수 있는 하나의 솔루션(중복 0을 인쇄하지 않으려는 경우)
예를 들어, 다음과 같은 벡터가 있는 경우elements그리고 받고 싶습니다.sum그 중에서
elements <- c(-1e-05, -2e-04, -3e-03, -4e-02, -5e-01, -6e+00, -7e+01, -8e+02)
sum(elements)
## -876.5432
보아하니, 마지막 디지털은1잘린 경우, 이상적인 결과는 다음과 같아야 합니다.-876.54321그러나 고정 소수점 인쇄 옵션으로 설정된 경우, 예를 들어sprintf("%.10f", sum(elements))중복 0은 다음과 같이 생성됩니다.-876.5432100000
여기의 자습서에 따라: 여기와 같이 특정 숫자의 소수 자릿수를 식별할 수 있는 경우 십진수를 인쇄합니다.-876.54321인쇄해야 할 10진수가 5개 있습니다. 그러면 매개 변수를 설정할 수 있습니다.format다음과 같이 작동합니다.
decimal_length <- 5
formatC(sum(elements), format = "f", digits = decimal_length)
## -876.54321
변경할 수 있습니다.decimal_length각 시간 쿼리를 기반으로 하여 다양한 10진수 인쇄 요구 사항을 충족할 수 있습니다.
주로 사용하는 경우tibbles, 숫자를 적용하는 기능은 다음과 같습니다.num().
다음은 예입니다.
library(tidyverse)
data <- tribble(
~ weight, ~ weight_selfreport,
81.5,81.66969147005445,
72.6,72.59528130671505,
92.9,93.01270417422867,
79.4,79.4010889292196,
94.6,96.64246823956442,
80.2,79.4010889292196,
116.2,113.43012704174228,
95.4,95.73502722323049,
99.5,99.8185117967332
)
data <-
data %>%
mutate(across(where(is.numeric), ~ num(., digits = 3)))
data
#> # A tibble: 9 × 2
#> weight weight_selfreport
#> <num:.3!> <num:.3!>
#> 1 81.500 81.670
#> 2 72.600 72.595
#> 3 92.900 93.013
#> 4 79.400 79.401
#> 5 94.600 96.642
#> 6 80.200 79.401
#> 7 116.200 113.430
#> 8 95.400 95.735
#> 9 99.500 99.819
따라서 필요에 따라 반올림 옵션을 다르게 설정할 수도 있습니다.저는 그것이 dfs 인쇄에 매우 도움이 되고 다소 빠른 해결책이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/2287616/controlling-number-of-decimal-digits-in-print-output-in-r
'code' 카테고리의 다른 글
| Firestore가 하나의 쿼리를 사용하여 조건에 맞는 여러 문서를 업데이트할 수 있습니까? (0) | 2023.06.17 |
|---|---|
| C에서 #error 지시어의 용도는 무엇입니까? (0) | 2023.06.17 |
| 비탈출 매개변수를 폐쇄적으로 사용하면 탈출할 수 있습니다. (0) | 2023.06.17 |
| $.textstatus는 성공을 표시하지만 데이터베이스는 업데이트되지 않습니까?제이쿼리 php 아약스 (0) | 2023.06.17 |
| adplyrtbl 열을 벡터로 추출합니다. (0) | 2023.06.17 |