R6.0의 새로운 기능입니다. memoise
함수를 통해 캐시 된 개인 개체를 만들려고합니다. 배경 아이디어는이 객체가 계산 집약적 인 계산에 의해 정의 될 것이고, 처음으로 다시 실행하는 것을 피하고자합니다.
Test(1)
인스턴트 반면
library(R6)
library(memoise)
library(digest)
Test <- memoise(function(x){
rnorm(1e8)
})
Test(1)
Test(1)
당신은 첫 번째 Test(1)
실행 두 번째 또는 두 소요 관찰해야한다.
R6 세계에서 내 MWE은 다음과 같습니다
factory <- R6Class("Test",
private = list(
..Z = memoise(
function(x){
rnorm(1e8)
}
)
),
active = list(
Z = function(value){
private$..Z(x=1)
}
)
)
object <- factory$new()
object$Z
이 나에게 rnorm(1e8)
를 표시해야합니다, 대신 내가 오류 얻을 :
Error in private$..Z() : object 'cache' not found
내 객체의 빠른 편집이 날 것을 알 수 있습니다를 후드 아래에서 ..Z는 다음과 같이 보입니다.
function (...)
{
hash <- digest(list(...))
if (cache$has_key(hash)) {
cache$get(hash)
}
else {
res <- f(...)
cache$set(hash, res)
res
}
}
그래서 내 memoise
설정에 실패한 것 같습니다. 위를 보면, 내가 어떻게 보이는지 모르겠다면 캐시가 어떻게 존재 하는가? 100 % 명확하지 않다. memoise
의 작동 방식에 대해 나는 분명하지 않다. 일반적으로 not found
오류는 범위 지정으로 인해 발생하며 private
및 R6
으로 인해 복잡해집니다.