如何在R中填充环境

我使用IMIS包(增量混合重要性抽样)来估计参数。不幸的是,它被写入寻找函数likelihood,sample.priorprior在它被调用的环境中,所以我不能将它包装在函数中(我的最终目标)。从?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,但我不知道如何创建一个新环境,该环境在i中有likelihood,prior,sample.priorresult吨。


编辑:使用@ BenBolker的很好的意见我有一个改善,但仍无法正常工作的尝试:

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)

}

但是,这仍然无法找到的功能。

回答:

你可以把environment(IMIS) <- environment()放在imisWrap的顶部来让它工作。这只会修改在imisWrap中的行为。包名称空间中的函数版本未更改。

回答:

你可以得到它通过attach荷兰国际集团的enviromnent工作(和detach使用后,荷兰国际集团清理):

imisWrap() <- function() { 

imisList <- list(

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 <- as.environment(imisList)

attach(imisEnv)

result = IMIS(500, 3000, 100, 10)

detach(imisEnv)

return(result)

}

imisWrap()

[1] "5000 likelihoods are evaluated in 0 minutes"

[1] "Stage MargLike UniquePoint MaxWeight ESS"

[1] 1.000 -0.806 1796.246 0.001 2434.921

[1] "maximum posterior= -1.96 , likelihood= 0.61 , prior= -2.57 , time used= 0 minutes, convergence= 0"

...

不过,我在这真的是与功能的问题呼应@BenBolker那包作者应该更干净地解决。

以上是 如何在R中填充环境 的全部内容, 来源链接: utcz.com/qa/263533.html

回到顶部