我正在努力将na.rm命令添加到如下所示的数据帧上的自定义函数(只是一个百分比)中,其中每一列都是一个时间点,其中填充了各行中标识的证券的价格。此df包含相当多的NAs。下面是函数:
pctabovepx=function(x) {
count_above_px=x>pxcutoff
100*(sum(count_above_px)/nrow(count_above_px))
}然后,我想在df的所有列上运行这个函数,价格数据在下面的范围内指定。在没有添加安娜命令的情况下,它什么也不返回("numeric(0)"),但是当我添加一个na.rm命令时,它返回"Error in FUN(X[1L],...):unused argument (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))))我想知道如何避免这个问题,无论是使用这个函数,还是通常使用不是均值或中位数的自编写函数。
发布于 2015-04-21 01:48:43
您需要将其作为参数添加到函数中,并将其传递给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)
}https://stackoverflow.com/questions/29754634
复制相似问题