IMIS
패키지 (증분 혼합 중요성 샘플링)를 사용하여 매개 변수를 추정하고 있습니다. 불행히도 함수가 호출 된 환경에서 likelihood
, sample.prior
및 prior
을 찾도록 작성되었으므로 함수 (내 목표)로 감쌀 수 없습니다. ?IMIS
에서 단 변량 예는 함수에 포장, 당연히,환경을 채우는 방법 R
require(IMIS)
likelihood <- function(theta) exp(-1*sin(3*theta)*sin(theta^2) - 0.1*theta^2)
prior <- function(theta) dnorm(theta, 0, 5)
sample.prior <- function(n) rnorm(n, 0, 5)
result = IMIS(500, 3000, 100, 10)
## also fine using do.call (pertinent below)
result <- do.call(IMIS, args = list(B = 500, B.re = 3000, number_k = 100, D = 10))
하지만를 잘하지 않는 일이 내 래퍼있는 환경을 만드는 것입니다 주위에
이rm(likelihood, prior, sample.prior, result)
imisWrap <- function() {
likelihood <- function(theta) exp(-1*sin(3*theta)*sin(theta^2) - 0.1*theta^2)
prior <- function(theta) dnorm(theta, 0, 5)
sample.prior <- function(n) rnorm(n, 0, 5)
result = IMIS(500, 3000, 100, 10)
return(result)
}
imisWrap() ## can't find sample.prior
내가 곧 길이 생각 (또는 해당 환경을 사용) do.call
을 사용하여 해당 환경에서 IMIS
을 실행하지만 likelihood
, , sample.prior
및 result
이있는 환경을 만드는 방법을 모르겠습니다. 티.
imisWrap2 <- function() {
likelihood <- function(theta) exp(-1*sin(3*theta)*sin(theta^2) - 0.1*theta^2)
prior <- function(theta) dnorm(theta, 0, 5)
sample.prior <- function(n) rnorm(n, 0, 5)
imisEnv <- new.env()
assign("likelihood", likelihood, envir = imisEnv)
assign("sample.prior", sample.prior, envir = imisEnv)
assign("prior", prior, envir = imisEnv)
result = do.call(IMIS,
args = list(B = 500, B.re = 3000, number_k = 100, D = 10),
envir = imisEnv)
return(result)
}
하지만 여전히 기능을 찾을 수 없습니다 :
편집 : BenBolker의 우수한 의견 내가이 개선하지만 여전히 시도를 작동하지 않은 @ 사용.
환경을 채우기 위해'assign'을 사용할 수 있다고 생각합니다. 패키지 작성자에게 물건을 좀더 건강하게 재 작성하도록 요청하는 것을 고려 했습니까? –
@BenBolker 또는 단순히'trace'를 사용하여 함수를 실시간으로 다시 작성하십시오. –