首页 文章

使用sapply将na.rm添加到自定义R函数

提问于
浏览
-1

我正在努力将na.rm命令添加到数据框下面的自定义函数(仅一个百分比),其中每列是一个时间点,其中填充了行中标识的证券的价格 . 这个df包含相当多的NA . 这是功能:

pctabovepx=function(x) {
  count_above_px=x>pxcutoff
  100*(sum(count_above_px)/nrow(count_above_px))
}

然后,我想在我的df的所有列中使用价格数据运行此函数,如下面的范围所示 . 在没有添加na命令的情况下,它不返回任何内容(“numeric(0)”),但是当我使用像mean这样的函数添加na.rm命令时,它返回“FUN中的错误(X [[1L]] ,. ..):未使用的参数(na.rm = TRUE)“ .

abovepar=sapply(master[min_range:max_range], pctabovepx)
abovepar=sapply(master[min_range:max_range], pctabovepx, na.rm=TRUE)

在尝试百分比之前,我还尝试简化并进行计数 . 以下命令未返回错误,但只返回了非NA的所有值,而不是返回高于截止值的子集 .

countsabovepx=as.data.frame(sapply(master[min_range:max_range],function(x) sum(!is.na(x>pxcutoff))))

我想知道如何避免这个问题,无论是这个函数还是通常自编函数都不是均值或中值 .

1 回答

  • 4

    您需要将它作为参数添加到函数中并将其传递给 sum . 您还需要考虑对 nrow 部分的影响 . 但是,在函数的其余部分的上下文中,我希望 count_above_px 是一个向量而 nrow 在这里没有意义 . 我认为你打算做 length ,你实际上是在计算 mean ,无论如何都有na.rm参数 . 您可能还想查看 pxcutoff ,因为它未在函数中定义 - 它是否也应作为参数传递?

    pctabovepx=function(x, na.rm=FALSE) {
      count_above_px=x>pxcutoff
      100*mean(count_above_px, na.rm=na.rm)
    }
    

相关问题