У меня возникла ситуация, когда я написал функцию R, ComplexResult
, которая вычисляет дорогостоящий результат, который позже будут использовать две другие отдельные функции: LaterFuncA
и LaterFuncB
.Хорошая практика сохранения результата функции для последующего использования в R
Я хочу сохранить результат ComplexResult
где-нибудь, так что и LaterFuncA
, и LaterFuncB
могут его использовать, и его не нужно пересчитывать. Результат ComplexResult
- это большая матрица, которую нужно вычислить только один раз, а затем повторно использовать позже.
R - мой первый набег на мир функционального программирования, поэтому он заинтересован в понимании того, что он считает хорошей практикой. Моя первая линия мышления такова:
# run ComplexResult and get the result
cmplx.res <- ComplexResult(arg1, arg2)
# store the result in the global environment.
# NB this would not be run from a function
assign("CachedComplexResult", cmplx.res, envir = .GlobalEnv)
Это все, что нужно делать? Единственным другим подходом, который я могу представить, является наличие большой функции «обертки», например:
MyWrapperFunction <- function(arg1, arg2) {
cmplx.res <- ComplexResult(arg1, arg2)
res.a <- LaterFuncA(cmplx.res)
res.b <- LaterFuncB(cmplx.res)
# do more stuff here ...
}
Мысли? Я вообще направляюсь в правильном направлении с любым из вышеперечисленных? Или есть вариант C, который более хитрый? :)
с 'cmplx.res <- ComplexResult (arg1, arg2)' вы выполняете присвоение, поэтому вам не нужно делать это 2 раза. В моей практике лучший способ хранения больших таблиц/матриц находится в файле «.txt». 'write.table' и' read.table' работают очень быстро –
'save (object, file =" filename ")', если вы хотите снова использовать объект 'load (file =" filename ")' – The6thSense