signif()
함수는 주어진 값의 유효 숫자를 기준으로 값을 반올림합니다. 이 함수는 숫자의 자릿수 모두에 적용됩니다. 따라서 크기의 서로 다른 주문 수가 반올림되고 다르게 절단됩니다. 예를 들어,이 벡터 x
...숫자의 소수부가있는 유효 숫자로 반올림 *
x <- c(100.1303421, 10.03421, 1.3421, 0.0003421)
lapply(x, signif, 2)
#> [[1]]
#> [1] 100
#>
#> [[2]]
#> [1] 10
#>
#> [[3]]
#> [1] 1.3
#>
#> [[4]]
#> [1] 0.00034
으로 ... 제 1 및 제 2 값 (100) 및 (10)에 절단이고 세 번째와 네 번째 값 (상이한 수 있지만) 소수 유지하면서 진수 값은 사라진다. 이것은 signif()
의 예상 출력입니다. 이 중요한 것으로 결정될 때 모든 숫자를 고려해야합니다.
각 숫자의 정수 부분을 무시하고 설정된 유효 자릿수가있는 소수 부분 만 포맷 할 수 있습니까? 이 값을 반환 할 수있는 이되고 싶습니다. c(100.13, 10.034, 1.34, 0.00034)
; 그 은 .
앞에 오는 완전한 정수 다음에 숫자의 소수 부분 인 유효 숫자 인 이옵니다.
지금, 나는 정수 일부 구성 요소에 값을 분리 만 일부 구성 요소, 에 signif()
를 실행하지만, 이것은 매우 해키 보인다 함수를 만들었습니다.
signif_ignore_integer <- function(x, digits = 2) {
as.integer(x) + signif(x - as.integer(x), digits)
}
lapply(x, signif_ignore_integer, 2)
#> [[1]]
#> [1] 100.13
#>
#> [[2]]
#> [1] 10.034
#>
#> [[3]]
#> [1] 1.34
#>
#> [[4]]
#> [1] 0.00034
는 정수 부분을 무시하면서 중요한 숫자 주어진 숫자 값을 반올림하는 (아마도 일부 공상
sprintf()
형식) 더 나은, 더 권장 방법이 있나요?
더있을 수 있습니다 하지만, 당신의 접근 방식이 비합리적으로 보이지는 않습니다. 그러나 당신은'floor'를 사용하고'lapply'를 피하기 위해 벡터화를 이용함으로써 그것을 능률화 할 수 있습니다 : my_signif = function (x, digits) floor (x) + signif (x-floor (x), digits); my_signif (x, 2)' – eipi10
오 우수합니다. 이것이 부당하지 않다는 것을 안심시켜줍니다. – Andrew
나는 대답으로 게시 한 더욱 간소화 된 접근 방식이 있다는 것을 깨달았습니다. @Ryan이 방금 (지금 삭제 된) 주석에 게시했습니다. – eipi10