【发布时间】: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)。