na.fail.default 中的错误:对象中的缺失值 - 但没有缺失值

Posted

技术标签:

【中文标题】na.fail.default 中的错误:对象中的缺失值 - 但没有缺失值【英文标题】:Error in na.fail.default: missing values in object - but no missing values 【发布时间】:2016-11-10 01:34:12 【问题描述】:

我正在尝试使用这些数据运行 lme 模型:

tot_nochc=runif(10,1,15)
cor_partner=factor(c(1,1,0,1,0,0,0,0,1,0))
age=runif(10,18,75)
agecu=age^3
day=factor(c(1,2,2,3,3,NA,NA,4,4,4))
dt=as.data.frame(cbind(tot_nochc,cor_partner,agecu,day))
attach(dt)

corpart.lme.1=lme(tot_nochc~cor_partner+agecu+cor_partner *agecu, 
                  random = ~cor_partner+agecu+cor_partner *agecu |day, 
                  na.exclude(day))

我收到此错误代码:

na.fail.default(list(cor_partner = c(1L, 1L, 2L, 1L, 1L, 1L, : 对象中的缺失值

我知道论坛中有类似的问题。但是,就我而言:

cor_partner 没有缺失值; 整个对象被编码为一个因素(至少从全球环境显示的内容来看)。

我可以用 na.action 排除那些 NA 值,但我更想知道函数为什么读取缺失值 - 以准确了解我的数据发生了什么。

【问题讨论】:

您能否提供数据和/或代码,为我们提供reproducible example ?否则很难回答这个问题...... @BenBolker 已编辑,谢谢 这在我看来像是一个错字/thinko。你能解释一下na.exclude(day) 应该做什么吗?我通常会通过将day 添加到数据框来做到这一点,然后使用attach(),而是在data 参数中使用组合数据框-包括day- .. . ?? 另外,在您提供的数据集中,day 的值只有 8 个,所有其他变量的值只有 10 个,所以我收到“可变长度不同”错误... 这是一个示例矩阵,它们不是我使用的数据。 day 是 dt 矩阵的一部分,有 10 个值,包括我编辑的 NA。 【参考方案1】:

tl;dr您必须一次在整个数据帧上使用na.exclude()(或其他),以便剩余的观察值在变量之间保持匹配...

set.seed(101)
tot_nochc=runif(10,1,15)
cor_partner=factor(c(1,1,0,1,0,0,0,0,1,0))
age=runif(10,18,75)
agecu=age^3
day=factor(c(1,2,2,3,3,NA,NA,4,4,4))
## use data.frame() -- *DON'T* cbind() first
dt=data.frame(tot_nochc,cor_partner,agecu,day)
## DON'T attach(dt) ...

现在试试:

library(nlme)
corpart.lme.1=lme(tot_nochc~cor_partner+agecu+cor_partner *agecu, 
              random = ~cor_partner+agecu+cor_partner *agecu |day, 
              data=dt,
              na.action=na.exclude)

我们收到收敛错误和警告,但我认为这是因为我们使用的是一个很小的虚构数据集,其中没有足够的信息,而不是因为代码存在任何固有问题。

【讨论】:

谢谢,它可以在没有任何实际数据警告的情况下工作。我认为 na.exclude(day) 会根据“day”中的值自动排除整行,而不是单列值,很高兴知道!【参考方案2】:

randomForest 包有一个 na.roughfix 函数“按中值/模式估算缺失值

你可以如下使用它

fit_rf<-randomForest(store~.,
        data=store_train,
        importance=TRUE,
        prOximity=TRUE,
        na.action=na.roughfix)

【讨论】:

【参考方案3】:

如果您的数据包含 Na 或缺失值,您可以使用它 它将传递与数据集中完全相同的数据。

rf<-randomForest(target~.,data=train, na.action = na.roughfix)

【讨论】:

这与@kurapati 的回答有何不同?【参考方案4】:

另一种可能的解决方案是使用data &lt;- na.omit(train),它可以让您轻松传递数据。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于na.fail.default 中的错误:对象中的缺失值 - 但没有缺失值的主要内容,如果未能解决你的问题,请参考以下文章

如何解决尝试将对象数组中的数据存储到新对象中的错误

删除对象中的错误值

SQL 中的函数中的无效对象名称错误

未定义不是本机反应中的对象错误

*ngfor json 数组对象中的错误显示

回调中的“对象引用未设置为对象实例”错误