繁体   English   中英

在蒙特卡洛设置种子

[英]Set.seed in monte Carlo

#year 2022

R.100<-runif(n=100, min = 40, max = 65)
R.100
summary(R.100)

R.norm.100<-rnorm(length(R.100), mean = 50, sd=7)
R.norm.100
summary(R.norm.100)

a=0.6
C=100

f<-seq(from=1.10, to=1.18, by=0.005)
B<-NULL
B<-as.data.frame(B)

for(i in 1:length(f)) {
  for(R in 1:length(R.norm.100)) {
    B[i, "degerler"] <- (R.norm.100[R]-(1-a)*C*f[i]) / R.norm.100[R]
  }
}

summary(B)

在运行上述循环函数并计算 B 时,我希望分子中 R 的模拟数在分母中相同。 例如,如果 R 在分子中模拟为 55,则计算 B 时,我希望分母中的 R 为 55。

如何为该函数编写 R 代码?

最后一件事,我想多次重复这个功能,比如50次。

你能帮我吗? 最好的问候 Zehra Civan

我不确定我是否理解你想要做什么。 R.norm.100是一个向量,它的分子和分母的值相同。 您的代码使用了 R 中很少需要的两个循环,因为您使用的函数是矢量化的。 在您的情况下, B[i, "degerler"]将被覆盖 100 次,以便只保留最后一个值。

当你这样做时:

B[i, "degerler"] <- (R.norm.100[R]-(1-a)*C*f[i]) / R.norm.100[R]

您正在替换每个 R 的计算值。要获得矩阵 B,您可以执行以下操作:

R.norm.100<-rnorm(length(R.100), mean = 50, sd=7)
a=0.6
C=100

f<-seq(from=1.10, to=1.18, by=0.005)
B<-matrix(0,nrow=length(R.norm.100),ncol=length(f))

for(i in 1:length(f)) {
  for(R in 1:length(R.norm.100)) {
    B[R,i] <- (R.norm.100[R]-(1-a)*C*f[i]) / R.norm.100[R]
  }
}

summary(B)

在 R 中,您不需要遍历所有元素,只需将您拥有的函数应用于向量本身。 例如:

i=1
result_1 = vector("numeric",length(R))
for(R in 1:length(R.norm.100)) {
        result_1[R] <- (R.norm.100[R]-(1-a)*C*f[i]) / R.norm.100[R]
      }
result_2 = (R.norm.100-(1-a)*C*f[i]) / R.norm.100
identical(result_1,result_2)
[1] TRUE

因此,您可以通过执行以下操作完全跳过双循环:

B = sapply(f,function(i)(R.norm.100[R]-(1-a)*C*i) / R.norm.100)

这给你你需要的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM