2014-03-26 17 views
0

我寫一個函數中的R是這樣的:如何將R中的函數輸出直接保存到工作負載中而不顯示它?

MH <- function(Nsim,var,initial) { 
Total <- 0 
X=rep(runif(1),Nsim) 
X[1]=initial               
for (i in 2:Nsim){ 
    Y=X[i-1]+rnorm(1, mean=0, sd=sqrt(var)) 
    alpha= fx(Y)/fx(X[i-1]) 
    u <- runif(1) 
    X[i]=X[i-1]+(Y-X[i-1])*(u<alpha) 
    Total=Total+as.numeric(u<alpha) 
    } 
    accept=Total/Nsim 
    accept 
} 

我想我的功能輸出爲「接受」,同時節省了向量X到工作區的情況下直接顯示它,這樣我可以在以後做的事情與X 。 我知道這是一個基本問題,但有人可以幫助我嗎?

+0

你的意思是你想的「接受」的值直接分配到工作區中的一個名爲「X」的對象? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto沒有。我的意思是,在我的函數中X是一個要生成的向量,但它可能很大,所以我希望它可以直接保存到工作區而不顯示它,同時讓「接受」作爲我的函數輸出。 – ElaineC

+1

如何返回包含accept和X的列表?如果問題是你不希望X被打印,那麼你可以寫一個自定義的打印功能... – Dason

回答

0

如何像這樣

MH <- function(Nsim,var,initial) { 
Total <- 0 
X=rep(runif(1),Nsim) 
X[1]=initial               
for (i in 2:Nsim){ 
    Y=X[i-1]+rnorm(1, mean=0, sd=sqrt(var)) 
    alpha= fx(Y)/fx(X[i-1]) 
    u <- runif(1) 
    X[i]=X[i-1]+(Y-X[i-1])*(u<alpha) 
    Total=Total+as.numeric(u<alpha) 
    } 
    accept=Total/Nsim 

    # put output into a list and give it class MH 
    output <- list(accept = accept, X = X) 
    class(output) <- "MH" 
    output 
} 

# Write a custom print function for objects of 
# class "MH" 
print.MH <- function(x, ...){ 
    print(x[["accept"]]) 
} 

out <- MH(10, 1, 1) 
out # only prints the acceptance rate 
out$accept # but can access accept 
out$X # and X individually 
+0

It works!謝謝! – ElaineC

相關問題