【发布时间】:2017-06-15 05:22:39
【问题描述】:
我正在阅读 Hadley 的 Advanced R 并且正在尝试使用 levels。他说,当因子被正确创建时,人们不应该能够将不正确的因子添加到向量中。我不小心创建了原子向量的级别,nlevels() 确实指示了正确的级别数,但我可以添加一个因子。
这是我的代码:
y<- c(1:5,"a","b")
levels(y)<- c("1","2","3")
nlevels(y) #The output is 3
现在,让我们再次检查y:
`y`
"1" "2" "3" "4" "5" "a" "b"
attr(,"levels")
"1" "2" "3"
我们注意到y 不是上述因素。
但是,现在当我使用 factor() 创建一个因子时,我看到了传统的因子变量:
z<-factor(c(1:5,"a","b"))
我得到五个因素。此外,当我尝试添加另一个不是因素的元素时,它适用于y,但不适用于z:
z[8] <- -1 #generates NA (as expected)
y[8]<-1 #This gets added.
现在,当我运行 class() 命令时,
class(z) #it shows factor
class(y) #it shows atomic vector
现在,我的困惑是当我为非因子变量创建级别时会发生什么?为什么我可以给它添加关卡? nlevels() 也返回正确数量的因子。我会很感激任何想法。我搜索了 SO 并没有找到关于 SO 的解释。
【问题讨论】:
标签: r