에 대한 반복 호출에 의존하는 패키지를 유지 관리합니다 deparse(control = c("keepNA", "keepInteger"))
. control
항상 동일하며 표현이 다릅니다. deparse()
와 동일한 옵션 세트를 반복적으로 해석하는 데 많은 시간을 소비하는 것 같습니다 .deparseOpts()
.
microbenchmark::microbenchmark(
a = deparse(identity, control = c("keepNA", "keepInteger")),
b = .deparseOpts(c("keepNA", "keepInteger"))
)
# Unit: microseconds
# expr min lq mean median uq max neval
# a 7.2 7.4 8.020 7.5 7.6 55.1 100
# b 3.0 3.2 3.387 3.4 3.5 6.0 100
일부 시스템에서는 중복 .deparseOpts()
호출이 실제로 대부분의 런타임 deparse()
( 화염 그래프 여기 )을 차지합니다 .
실제로 .deparseOpts()
한 번만 호출 한 다음 숫자 코드를에 제공 deparse()
하고 싶지만 .Internal()
C 코드를 직접 호출 하거나 호출 하지 않으면 불가능한 것처럼 보입니다. 이 중 어느 것도 패키지 개발 관점에서 최적이 아닙니다.
deparse
# function (expr, width.cutoff = 60L, backtick = mode(expr) %in%
# c("call", "expression", "(", "function"),
# control = c("keepNA", "keepInteger", "niceNames",
# "showAttributes"), nlines = -1L)
# .Internal(deparse(expr, width.cutoff, backtick, .deparseOpts(control),
# nlines))
# <bytecode: 0x0000000006ac27b8>
# <environment: namespace:base>
편리한 해결 방법이 있습니까?