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 <- nafac(z)
。
R 通过 value 而不是引用传递。所以正如@user2554330所说:nafac(z)
所做的只是将z
的value存储在x
内,然后修改x
在的范围内功能。原来的 z
在您的工作区中保持不变。你需要做的是将nafac()
重写为return()
x
的修改版本,然后使用这个结果覆盖原来的z
,如下所示:z <- 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函数将多个因子水平定义为缺失的主要内容,如果未能解决你的问题,请参考以下文章