cache_filesystem
과 함께 memoise
패키지를 사용하여 반짝이는 응용 프로그램에서 사용할 수 있도록 장기간 실행되는 기능을 저장하고 싶습니다. 이것은 거의 완벽하게 작동합니다. 문제는 입력이 변경 될 DB 연결 (다른 것들 중에서)을 포함하는 목록 객체라는 것입니다. 내 입력 개체에서이 요소를 무시하고 싶습니다.일치하지 않는 파일 시스템에 대해 메모하십시오.
db 연결은 세션마다 변경되지만 입력의 id
요소 만보고 목록의 다른 요소는 볼 수 없으므로 memoise
이 필요합니다. 내가 할 수있는 방법이 있니? 나는 ...
논쟁을 보았습니다. 그러나 이것은 더 이상 제한하지 않는 것처럼 보입니다.
간단한 예 :
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
편집 : 정적 DB 그렇게 정적 DB가에 의해 정의된다 가리키는 결과, 를 캐시에 문제가 없는지에 내 함수의 입력은 실제로 점 id
요소가 있지만 동일한 DB에 다른 연결을 설정할 수 있습니다. 기능은 임의로 복잡 할 수 있습니다. 예 :
function(dbInputObj){
<Many table joins and aggregations>
<Some logic and conditions>
<More table joins>
return(result)
}
응답 해 주셔서 감사합니다. - 자세한 내용으로 질문을 수정했습니다. 함수를 임의적으로 복잡하게 만들고 싶기 때문에 필자는 입력리스트의 일부 요소를'memoise '에서 숨기지 않고서는 이것을 할 수있는 방법을 생각할 수 없다. –
간단한 해킹 (개념적으로는 권장하지 않음)을 사용할 수 있지만 데이터베이스 끝에서 캐시하는 것이 더 논리적이라고 생각합니다. dbConn을 변수로 가져오고 dbConn을 매개 변수 대신 전역 변수로 사용하는 함수를 작성합니다. 이것은'memoise'의 여러 가정을 깨뜨리지 만 여러분의 경우에는 효과가있을 수 있습니다. – dracodoc