尝试在以下代码中运行归因函数时出现“ match.arg(what)中的错误:'arg'必须为NULL或字符向量”

时间:2019-05-30 02:20:04

标签: r hmisc

我正在尝试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或字符向量

(顺便说一句平均值为10.51)

2 个答案:

答案 0 :(得分:1)

@Rohan 提供的答案是 100% 准确的。但是,我想为遇到同样问题的人做一些补充。

TL;DR:
在您的代码中替换要估算的引用 Hmisc::impute(matrix_to_operate_on, replacement_value)

可以在此文档 https://www.rdocumentation.org/packages/Hmisc/versions/4.4-1/topics/impute 中找到 impute 参数列表。

对于极客:
欺诈/不需要的 impute 函数是在库 e1071https://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:: 加到插补调用中来引用正确的函数即可。

良好做法:
为了避免将来出现这种棘手的情况,请始终在函数来自的库之前加上。您永远不知道是否有其他 R 函数具有“邪恶”双胞胎。 From [package] import [function] in R

答案 1 :(得分:0)

最后我自己找到了解决问题的办法。与软件包Hmisc一起使用时,名为e1071的软件包引起了问题。这两个软件包都具有估算功能,并且当两个软件包都处于活动状态时提供使用时,它将不会运行。因此故事的寓意可以使用其中任何一个。