[英]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.