R语言 "match.arg(what) 中的错误:'arg' 必须是 NULL 或字符向量"时尝试



我正在尝试在数据集的列中用平均值impute缺失值。 使用Hmisc包中提供的插补函数

尝试运行几组代码。过去,我在同一数据集上使用过这段代码,但是,现在它没有运行。

impute(crime$average.ed,mean)
crime$average.ed<-as.numeric(impute(crime$average.ed, mean))
summary(crime)

变量average.ed中的缺失值必须替换为平均值。 我不断收到错误

match.arg(what) 中的错误:"arg"必须是 NULL 或字符向量

(BTW平均值为10.51)

终于自己找到了解决问题的办法。名为 e1071 的软件包在与软件包 Hmisc 一起使用时导致问题。两个包都有插补功能,当两个包都处于活动状态时,它不会运行。所以寓意的故事使用任何一个包。

@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
}

在调查了插补函数的主体后,您可以猜测在哪里 上面的错误来自,Error in match.arg(what) : 'arg' must be NULL or a character vector

现在您知道了问题所在,因此只需通过在插补调用前面附加正确的库Hmisc::来引用正确的函数。

良好做法:
为避免将来出现此类粘性情况,请始终在函数来源的库前面加上。你永远不知道是否有任何其他R函数具有"邪恶"的双胞胎。 从 R 中的 [包] 导入 [函数]

最新更新