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