我正在努力将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))))
我想知道如何避免这个问题,这个问题都有这个功能,一般都是自编的函数,不是均值或中位数。
答案 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)
}