首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“match.arg中的错误(什么):'arg‘必须是NULL或字符向量”,当试图在下面的代码中运行impute函数时

“match.arg中的错误(什么):'arg‘必须是NULL或字符向量”,当试图在下面的代码中运行impute函数时
EN

Stack Overflow用户
提问于 2019-05-30 02:20:04
回答 2查看 1.4K关注 0票数 1

我试图在dataset中的一个列中用平均值表示缺少的值。使用Hmisc包中可用的估算函数

已经试过运行几套代码。在过去,我使用了这段代码&但是,在相同的数据集中,现在它没有运行。

代码语言:javascript
运行
复制
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)

EN

回答 2

Stack Overflow用户

发布于 2019-05-31 05:25:11

最后我自己找到了解决问题的方法。一个名为e1071的包在与package一起使用时引起了问题。这两个包都具有impute函数,并且当两个包都处于活动状态时使用时,它将不会运行。所以这个故事的寓意就是用任何一个程序包。

票数 3
EN

Stack Overflow用户

发布于 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函数是在库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的内省功能。这将允许您查看正在调用的实际函数的源。

在有问题的情况下,这看起来是这样的:

代码语言:javascript
运行
复制
> 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56370848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档