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

时间:2015-04-20 17:36:18

标签: r na

我正在努力将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 个答案:

答案 0 :(得分: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)
}