[英]How to loop over array and store values of operations in other array
為了繪制一個模式(近似錯誤,樣本大小),我想循環一個數組(運行)以獲得 4 個近似錯誤值,當我嘗試使用一個值時它正在工作:
但是當我開始使用數組時,我可以打印這些值,但我不能將結果存儲在一個變量中,以便將所有值存儲在所有變量中,例如運行以在 plot 中顯示它們,這是我的代碼:
runs <- c(1000, 10000, 100000, 1000000)
apro_err <- c()
pi_real <- 3.14159265
for (i in runs){
#runif samples from a uniform distribution
xs <- runif(i,min=-0.5,max=0.5)
ys <- runif(i,min=-0.5,max=0.5)
in.circle <- xs^2 + ys^2 <= 0.5^2
mc.pi <- (sum(in.circle)/i)*4
absdif <- abs(mc.pi - pi_real)
apro_err[i] <- absdif
print(absdif)
# plot(xs,ys,pch=".",col=ifelse(in.circle,"blue","red"),xlab='',ylab='',asp=1, main=paste("MC Approximation of Pi =",mc.pi))
}
plot(apro_err, runs, ylab='Approximation Error', xlab='Sample Size',col='red')
您在代碼中遇到的問題是您使用i
作為運行( 1000
...),然后您使用相同的i
存儲在apro_err[i]
中。
我重新格式化了代碼,以便您現在可以正確存儲值。 這使您可以 plot 四個點,每個運行大小一個,而不僅僅是一個。
runs <- c(1000, 10000, 100000, 1000000)
apro_err <- c()
PI_REAL <- 3.14159265
UNI_MIN <- -0.5
UNI_MAX <- 0.5
for (i in seq_along(runs)){
#runif samples from a uniform distribution
run <- runs[i]
xs <- runif(run, min = UNI_MIN, max = UNI_MAX)
ys <- runif(run, min = UNI_MIN, max = UNI_MAX)
in.circle <- xs^2 + ys^2 <= UNI_MAX^2
mc.pi <- (sum(in.circle)/run) * 4
absdif <- abs(mc.pi - PI_REAL)
apro_err[i] <- absdif
print(absdif)
# plot(xs,ys,pch=".",col=ifelse(in.circle,"blue","red"),xlab='',ylab='',asp=1, main=paste("MC Approximation of Pi =",mc.pi))
}
plot(apro_err, runs, ylab='Approximation Error', xlab='Sample Size',col='red')
讓我知道這是否是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.