【问题标题】:Running a Monte Carlo simulation in R, and building a vector from it在 R 中运行蒙特卡罗模拟,并从中构建一个向量
【发布时间】:2021-04-24 20:01:51
【问题描述】:

我正在尝试编写的函数的目标是执行以下操作

  1. 随机选择一个介于 0 到 10 之间的数字 N
  2. 评估eq(N) = P
  3. 在 0 到 1 之间随机生成一个数字 L
  4. 如果L > P,我们丢弃这个数字,否则,我们将P 添加到数字向量中。
  5. 重复此操作的次数等于我们函数的输入 runs

尝试运行 neutronrejector 会导致几个错误:

Error: unexpected '=' in:
"  U <- U+1
  if(U ="
>   }
Error: unexpected '}' in "  }"
> }
Error: unexpected '}' in "}"

这些是错误消息。我的代码如下。谁能看看这个,看看我做错了什么?我对用 R 编写函数完全陌生,我更习惯于使用预设包。

eq = function(x){x*(exp(-x/1.4))}

values <- c()
U <- 0


neutronrejector = function(runs){
  repeat{
  N = runif(1, min=0, max=10)
  P = eq(N)
  L = runif(100, min=0, max=1)  
  ifelse(L > P, , values = c(N, values))
  U = U+1
  if(U = runs) break
  }
}

谢谢!

【问题讨论】:

  • 使用== 来测试相等性

标签: r montecarlo


【解决方案1】:

一些更正:

  • 平等由== 测试
  • 使用runif(1,min=0,max=1)获取一个随机数
  • if 声明而不是 ifelse
neutronrejector = function(runs){
  repeat{
    N = runif(1, min=0, max=10)
    P = eq(N)
    L = runif(1, min=0, max=1)  
    if (L > P) values = c(N, values)
    U = U+1
    if(U == runs) break
  }
  values
}

neutronrejector(10)
[1] 4.997457 7.699111 7.009196 5.515345 3.422422 9.495239 8.758963 2.209809 6.392655

【讨论】:

  • 谢谢!前两个只是愚蠢的错别字,但我不知道使用 if 而不是 ifelse。仍然是一个学习过程!
猜你喜欢
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多