Tekrarlanan çağrılara dayanan bir paket tutuyorum deparse(control = c("keepNA", "keepInteger")). controlher zaman aynıdır ve ifade değişir. deparse()aynı seçenek grubunu tekrar tekrar yorumlamak için çok zaman harcıyor gibi görünüyor .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
Bazı sistemlerde, gereksiz .deparseOpts()çağrılar aslında çalışma süresinin çoğunu alır deparse()( burada alev grafiği ).
Gerçekten sadece bir .deparseOpts()kez aramak ve daha sonra sayısal kodu tedarik etmek istiyorum deparse(), ama her .Internal()ikisi de bir paket geliştirme perspektifinden en uygun olan C kodu doğrudan çağırmadan veya çağırmadan imkansız görünüyor .
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>
Uygun bir çözüm var mı?