Я хотел бы использовать пакет memoise
с cache_filesystem
для кэширования долго работающих функций для использования в блестящем приложении. Это почти отлично работает, проблема в том, что вход представляет собой объект списка, который содержит (среди прочего) соединение с базой данных, которое будет меняться. Я хочу игнорировать этот элемент в моем объекте ввода.
Соединение с БД будет меняться от сеанса к сеансу, но мне нужно, чтобы memoise
смотрел только элемент id
во входных данных, а не другие элементы в списке. Есть ли способ сделать это? Я просмотрел аргумент ...
, но он, кажется, только еще больше ограничивает, а не расслабляет.
Упрощенный пример ниже:
localCache = cache_filesystem("memoiseCache/")
input1_1 = list(id = "id1", dbConn = 100)
input1_2 = list(id = "id1", dbConn = 101)
testFun=function(input) {
print("Running the function")
return(100)
}
library(memoise)
testFun.mem = memoise(testFun)
# This will run the function for the initial time - CORRECT
> testFun.mem(input1_1)
[1] "Running the function"
[1] 100
# This will now fetch the cached result - CORRECT
> testFun.mem(input1_1)
[1] 100
# I need this to ignore the dbConn element and instead fetch the cached result
> testFun.mem(input1_2)
[1] "Running the function"
[1] 100
РЕДАКТИРОВАТЬ: Входные данные для моей функции фактически указывают на статическую БД, поэтому нет проблем с кэшированием результатов, на которую указывает статическая БД, определяется элементом id
, но могут быть установлены разные подключения к та же БД. Функции могут быть сколь угодно сложными. Например:
function(dbInputObj){
<Many table joins and aggregations>
<Some logic and conditions>
<More table joins>
return(result)
}