我试图在dataset中的一个列中用平均值表示缺少的值。使用Hmisc
包中可用的估算函数
已经试过运行几套代码。在过去,我使用了这段代码&但是,在相同的数据集中,现在它没有运行。
impute(crime$average.ed,mean)
crime$average.ed<-as.numeric(impute(crime$average.ed, mean))
summary(crime)
变量average.ed
中缺少的值必须替换为平均值。我一直在犯错误
Match.arg(什么)中的错误:'arg‘必须为NULL或字符向量
(顺便说一句,是10.51)
发布于 2019-05-31 05:25:11
最后我自己找到了解决问题的方法。一个名为e1071的包在与package一起使用时引起了问题。这两个包都具有impute函数,并且当两个包都处于活动状态时使用时,它将不会运行。所以这个故事的寓意就是用任何一个程序包。
发布于 2021-01-13 20:53:33
@Rohan所提供的答案是100%的。然而,我想为那些陷入同样问题的人做一些补充。
TL;DR:
在代码中用Hmisc::impute(matrix_to_operate_on, replacement_value)
替换对加密的引用
impute
参数列表可以在本文档https://www.rdocumentation.org/packages/Hmisc/versions/4.4-1/topics/impute中找到。
极客:
欺骗性/多余的impute
函数是在库e1071
,https://www.rdocumentation.org/packages/e1071/versions/1.7-4/topics/impute中定义的函数。
如何诊断问题?
在R中有一个名为body()
,https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/body的内省功能。这将允许您查看正在调用的实际函数的源。
在有问题的情况下,这看起来是这样的:
> body(impute)
{
what <- match.arg(what)
if (what == "median") {
retval <- apply(x, 2, function(z) {
z[is.na(z)] <- median(z, na.rm = TRUE)
z
})
}
else if (what == "mean") {
retval <- apply(x, 2, function(z) {
z[is.na(z)] <- mean(z, na.rm = TRUE)
z
})
}
retval
}
在研究了impute函数的主体之后,您可以猜测上面的错误来自哪里,Error in match.arg(what) : 'arg' must be NULL or a character vector
。
现在您已经知道了问题所在,所以只需将正确的库Hmisc::
放在impute调用前面,就可以引用正确的函数。
良好实践:
为了避免将来出现这种棘手的情况,请始终将函数来自的库放在前面。你永远不知道有没有其他的R函数有“邪恶”双胞胎。From [package] import [function] in R
https://stackoverflow.com/questions/56370848
复制相似问题