“match.arg(what)中出错:'arg'必须为NULL或字符向量”,当尝试在下面的代码中运行插补函数时

“match.arg(what)中出错:'arg'必须为NULL或字符向量”,当尝试在下面的代码中运行插补函数时,r,hmisc,R,Hmisc,我试图用数据集中的一列中的平均值来插补缺失的值。 使用Hmisc包中可用的插补函数 我试过运行几组代码。过去我在同一个数据集上使用了这段代码,但是现在它没有运行 impute(crime$average.ed,mean) crime$average.ed<-as.numeric(impute(crime$average.ed, mean)) summary(crime) 变量average.ed中缺少的值必须替换为mean。 我总是出错 match.arg中出错什么:'arg'必须为NU

我试图用数据集中的一列中的平均值来插补缺失的值。 使用Hmisc包中可用的插补函数

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

impute(crime$average.ed,mean)
crime$average.ed<-as.numeric(impute(crime$average.ed, mean))
summary(crime)
变量average.ed中缺少的值必须替换为mean。 我总是出错

match.arg中出错什么:'arg'必须为NULL或字符向量


顺便说一句,平均值是10.51

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

最终我自己找到了解决问题的方法。与包Hmisc一起使用时,名为e1071的包导致问题。这两个包都有插补功能,如果在两个包都处于活动状态时使用,则不会运行。因此,故事的寓意是使用任何一个包。

由@Rohan提供的答案是100%正确的。然而,我想为陷入同样问题的人们补充一些内容

TL;博士: 在代码中替换要插补的引用 Hmisc::输入矩阵到操作,替换值

可在此文档中找到插补参数列表

对于极客: 欺诈/不需要的插补函数是在库e1071中定义的函数

如何诊断问题? 在R中有一个称为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
}
在调查了插补函数的主体之后,您可以猜测它在哪里 上面的错误来自match.arg中的错误。什么:'arg'必须为NULL或字符向量

现在您知道了问题所在,所以只需通过在impute调用前添加正确的库Hmisc::来引用正确的函数

良好做法: 为了避免将来出现这种棘手的情况,请始终在函数来自的库前面加上前缀。你永远不知道是否有任何其他的R函数有邪恶的孪生兄弟。
由@Rohan提供的答案是100%准确的。然而,我想为陷入同样问题的人们补充一些内容

TL;博士: 在代码中替换要插补的引用 Hmisc::输入矩阵到操作,替换值

可在此文档中找到插补参数列表

对于极客: 欺诈/不需要的插补函数是在库e1071中定义的函数

如何诊断问题? 在R中有一个称为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
}
在调查了插补函数的主体之后,您可以猜测它在哪里 上面的错误来自match.arg中的错误。什么:'arg'必须为NULL或字符向量

现在您知道了问题所在,所以只需通过在impute调用前添加正确的库Hmisc::来引用正确的函数

良好做法: 为了避免将来出现这种棘手的情况,请始终在函数来自的库前面加上前缀。你永远不知道是否有任何其他的R函数有邪恶的孪生兄弟。

@RonakShah感谢你所做的一切@RonakShah感谢你所做的一切!