首页 > 解决方案 > 在为 R 中的数据框名称列表生成样本比例时,无法弄清楚为什么 lapply 语句会生成 NaN?

问题描述

我创建了一个函数“visibilityProportionODV”,它生成二进制变量 x$ODV 的样本比例,其中“x”是列表“dfnames”中的某个数据框。变量 ODV 包含值 1、0 或缺失 (NA)。我正在尝试将我的数据框列表应用于输出样本比例的函数。我已经通过插入“x”的特定数据帧来验证该函数在 lapply 函数之外工作。然而,我仍然在 lapply 函数中获得了 NaN 的输出。谁能告诉我哪里出错了?

namesToProportionFct <- function(x) {
  x$ODV <- as.integer(x$ODV)
  numNA <- length(x$ODV[which(is.na(x$ODV) == TRUE)])
  prop <- sum(x$ODV, na.rm = TRUE) / (length(x$ODV) - numNA)
  return(prop)
}

visibilityProportionODV <- lapply(dfnames, namesToProportionFct)

# Output:
> visibilityProportionODV
[[1]]
[1] NaN

[[2]]
[1] NaN

[[3]]
[1] NaN

[[4]]
[1] NaN

[[5]]
[1] NaN

[[6]]
[1] NaN

[[7]]
[1] NaN

[[8]]
[1] NaN

[[9]]
[1] NaN

[[10]]
[1] NaN

标签: rfunctiondataframelapply

解决方案


使用以下 data.frames 虚拟列表,您的功能和 lapply 对我来说工作正常:

dfnames <- list(
  data.frame(ODV=rep(sample(c(1,0,NA)),100)),
  data.frame(ODV=rep(sample(c(1,0,NA)),100)) 
)

您能否提供一个类似的重新创建 NaN 的 data.frames 列表?


推荐阅读