【问题标题】:Write a basic function in R to get the interquartile (Q3-Q1)在 R 中编写一个基本函数以获得四分位数(Q3-Q1)
【发布时间】:2020-09-16 03:39:03
【问题描述】:

我对代码有如下问题。问题如下图。

编写一个接收数字向量并返回四分位数的基本函数(称为 getIQR) 范围(第 75 个百分位 - 第 25 个百分位)。您可以使用分位数功能。去掉上面的名字 返回的向量(即确保返回的项目没有 75% 之类的名称或类似名称)。 允许您的函数将未命名的参数传递给分位数函数。

让你的函数检查传递的值是否是数字,以及它是否适合这个参数(即是一个向量或只有一列的数据框/tibble - 不允许使用矩阵) - 如果不是,停止 函数并返回适当的消息。

注意:尝试处理一维的数据帧/小标题对我来说有点棘手。我首先检查了 如果它是一个数据框,如果是,我检查它是否只有一列。如果这两个都是真的,我转换了 该列到一个向量(使用 [[ 或拉)。然后我检查了该值是否不是数字或不是 向量。

这是我的部分代码,我不知道为什么它失败了。

# Write the function
getIQR <- function(vec){
  if(!is.data.frame(vec)){
    stop("This function first requires a data.frame.")
  }
  if(ncol(vec) != 1){
   stop("This function requires only one column.") 
  }
  if(is.data.frame(vec) && ncol(vec) == 1){
    as.numeric(t(vec))
  }
  if(!is.numeric(vec)){
    stop("This function only works for a numeric")
  }

  Q3 <- quantile(vec, .75)
  Q1 <- quantile(vec, .25)
  IQR <- Q3 - Q1
  IQR
}

vec <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
getIQR(vec)

它总是说“这个函数首先需要一个data.frame。”根据注释我还应该输入什么?

非常感谢您的帮助。

【问题讨论】:

    标签: r function statistics


    【解决方案1】:

    以下代码

    if(!is.data.frame(vec)){
      stop("This function first requires a data.frame.")
    }
    

    如果您没有向您的函数提供 data.frame 类型的对象,则会产生错误消息。这是一个输入类型检查。

    您提供的对象:

    vec <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    

    不是一个data.frame,而是一个数字向量。因此,您会收到错误消息。

    所以要么你决定你的函数期望 vec 是一个向量,在这种情况下删除 if 子句并可能添加

    if(!is.numeric(vec)){
        stop("Input is not a numeric vector")
    }
    

    检查它。或者,您或您为您的函数提供一个 data.frame

    vec <- data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
    

    但是,您需要更正函数中的另一个错误:您忘记分配

    的结果
    as.numeric(t(vec))
    

    到任何变量(使用&lt;-),所以这段代码可以没有效果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2022-06-14
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多