【问题标题】:Adding na.rm to Custom R Function with sapply使用 sapply 将 na.rm 添加到自定义 R 函数
【发布时间】:2015-06-27 13:50:41
【问题描述】:

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

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

然后我想在我的 df 的所有列上使用价格数据在 sapply 内运行此函数,如下面的范围中指定的那样。在不添加 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))))

我想知道如何避免这个问题,无论是使用这个函数还是使用非均值或中值的自写函数。

【问题讨论】:

标签: r na


【解决方案1】:

您需要将它作为参数添加到您的函数中并将其传递给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)
}

【讨论】:

  • 您也可以“传递”参数:pctabovepx=function(x, ...) {count_above_px=x>pxcutoff; 100*mean(count_above_px, ...)} 然后sapply(master[min_range:max_range], pctabovepx, na.rm=TRUE) 应该仍然有效。
  • 谢谢,实际上并不是在这里寻找平均值,但我只是没有意识到我需要通过顶部的 na.rm。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多