【问题标题】:How to make probability distribution an argument of a function in R?如何使概率分布成为R中函数的参数?
【发布时间】:2021-03-13 00:44:56
【问题描述】:

我在 R 中有一个函数 f,它涉及绘制许多表单样本

sample <- rnorm(k,0,1) 

其中 k 是某个整数。我想将分布类型作为这个函数的参数,所以我可以快速生成形式的样本

sample <- runif(k,0,1)

或其他概率分布,例如。换句话说,我希望能够编写 f(k,uniform) 并生成第二种类型的采样,而 f(k,normal) 则用于第一种。

这可能吗?我想避免每次更改分布时都必须重复修改函数中的代码。

【问题讨论】:

    标签: r


    【解决方案1】:

    不知道这有多大用处,但是:

    f <- function(k,g){g(k)}
    

    用于f(100,runif)f(100,rnorm)

    作为一个变体:

    f <- function(k,g,...){g(k,...)}
    

    这也允许f(100,rnorm,10,2)之类的东西

    【讨论】:

      【解决方案2】:

      这是您正在寻找的有前途的、正在开发中的实现。 distributions package is available on Github 和 CRAN。

      这是一个示例用法:

      library(distributions)
      
      X <- Bernoulli(0.1)
      
      random(X, 10)
      #>  [1] 0 0 0 0 0 0 0 0 1 0
      pdf(X, 1)
      #> [1] 0.1
      
      cdf(X, 0)
      #> [1] 0.9
      quantile(X, 0.5)
      #> [1] 0
      

      【讨论】: