R函数将多个因子水平定义为缺失

Posted

技术标签:

【中文标题】R函数将多个因子水平定义为缺失【英文标题】:R function to define several factor levels as missing 【发布时间】:2022-01-12 17:35:46 【问题描述】:

我有几个因素,我想将其定义为“无答案”和“不知道”级别。但是,我为实现此目的而编写的功能不起作用,我无法弄清楚原因。 示例:

y <- factor(c("a", "b", "c", "Don´t know", "No answer"))
z <- factor(c("a", "b", "c", "Don´t know", "No answer"))
y

[1] a          b          c          Don´t know No answer 
Levels: a b c Don´t know No answer

将单个变量的级别定义为缺失确实有效

levels(y)[levels(y)=="Don´t know"|levels(y)=="No answer"]<- NA
y
[1] a    b    c    <NA> <NA>
Levels: a b c

但是,应用函数不会。

nafac <- function(x)

levels(x)[levels(x)=="Don´t know"|levels(x)=="No answer"]<- NA

nafac(z)
z
[1] a          b          c          Don´t know No answer 
Levels: a b c Don´t know No answer

函数有什么问题?谢谢!

【问题讨论】:

你的函数修改了它的本地副本;它需要返回修改后的值,你称之为z &lt;- nafac(z) R 通过 value 而不是引用传递。所以正如@user2554330所说:nafac(z)所做的只是将zvalue存储在x内,然后修改x的范围内功能。原来的 z 在您的工作区中保持不变。你需要做的是将nafac()重写为return()x的修改版本,然后使用这个结果覆盖原来的z,如下所示:z &lt;- nafac(z) 【参考方案1】:

我们可以简单地添加return 来返回更新的向量;

nafac <- function(x)
levels(x)[levels(x)=="Don´t know"|levels(x)=="No answer"]<- NA
return(x)


nafac(z)

输出;

a b c <NA> <NA>

【讨论】:

以上是关于R函数将多个因子水平定义为缺失的主要内容,如果未能解决你的问题,请参考以下文章