2014-03-26 3 views
0

이 같은 R의 기능을 쓰고 있어요 :함수 출력을 R을 작업량에 직접 저장하지 않고 직접 저장 하시겠습니까?

내 기능 출력 작업 공간에 벡터 X를 저장하는 동안 나중에 X와 함께 일을 할 수 있도록 직접 표시하지 않고 '동의'가되고 싶어요
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 
} 

. 이것이 기본적인 질문이지만 누군가이 도움이 될 수 있습니까?

+0

같은 대해 당신이 직접 작업 공간에 "X"라는 이름의 객체에 "동의 함"의 값을 할당 할 의미합니까? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto Nope. 내 말은 내 함수 X는 생성 될 벡터이지만, 커서를 표시하지 않고 직접 작업 영역에 저장하고 동시에 "accept"를 내 함수 출력으로 저장하는 것이 좋습니다. – ElaineC

+1

수락과 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

그것은 작동합니다! 감사! – ElaineC

관련 문제