如何以与标准库中相同的方式编写函数?

时间:2017-10-02 19:36:58

标签: r

编辑:虽然这个问题与许多统计学生(特别是那些有其他编程语言经验的学生)有关,但它已被关闭。不过,给出的提示非常有用。您可以使用ifelse函数,如下所示:

https://www.googleapis.com/auth/youtube

如果你想对其他东西进行矢量化,我祝你好运。

/ EDIT

标准库中的函数将采用"数字向量"并返回数字向量,但我不知道。我如何编写qbern04以便我可以像qnorm一样使用它,而不必使用as.numeric和lapply?

qbern24 <- function(x, p) {
        ifelse(x <= 0, -Inf,
               ifelse(x > 0 & x <= 1-p, 0,
                  ifelse(x > 1-p & x <= 1, 1,
                     Inf)
                  )
               )
}

1 个答案:

答案 0 :(得分:0)

qbern <- function(x, p) {
  OTHERWISE <- TRUE
  dplyr::case_when(
                     (x <= 0) ~ -Inf,
    ((x > 0) && (x <= (1-p))) ~ 0,
      ((x > 1-p) && (x <= 1)) ~ 1,
                    OTHERWISE ~ Inf
  )
}

qbern04 <- function(x) { qbern(x, 0.4) }

case_when()来自dplyr。如果您不想要这种依赖关系,那么请阅读向量化并学习使用ifelse()sapply()vapply(),因为lapply()旨在返回list