在R-devel列表中,Martin Maechler发布了一条关于因子中重复级别的信息。
“自2009年以来,具有非唯一(重复)级别的因子已被弃用 - 现在更加被弃用…”。它在2016年6月4日被发布。
它说明在预定于2017年4月的R 3.4中,重复级别将导致错误,而不再仅仅是警告。
我想知道为什么levels函数没有引起类似的警告?这里我将前三个级别组合成两种方式的“a”,其中一种已被弃用。
例子
我希望能够理解为什么R对后者的处理方式与前者不同。
这是levels的记录行为,我没有利用未经声明的元素。在?levels中,有一个示例允许重复的级别出现。我会将其粘贴以节省您的查找时间。
“自2009年以来,具有非唯一(重复)级别的因子已被弃用 - 现在更加被弃用…”。它在2016年6月4日被发布。
它说明在预定于2017年4月的R 3.4中,重复级别将导致错误,而不再仅仅是警告。
我想知道为什么levels函数没有引起类似的警告?这里我将前三个级别组合成两种方式的“a”,其中一种已被弃用。
例子
> x <- c("a", "b", "c", "d")
> xf <- factor(x, levels = c("a", "b", "c", "d"),
labels = c("a", "a", "a", "d"))
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL)
as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
> xf <- factor(x)
> levels(xf) <- c("a", "a", "a", "d")
> xf
[1] a a a d
Levels: a d
我希望能够理解为什么R对后者的处理方式与前者不同。
这是levels的记录行为,我没有利用未经声明的元素。在?levels中,有一个示例允许重复的级别出现。我会将其粘贴以节省您的查找时间。
## combine some levels
z <- gl(3, 2, 12, labels = c("apple", "salad", "orange"))
z
levels(z) <- c("fruit", "veg", "fruit")
z
xf <- factor(x, levels = c("a", "b", "c", "d"), labels = c("a", "a", "a", "d"))
中,你试图创建一个带有重复类别的因子变量,这是无效的操作。例如,标签中的值将覆盖级别参数。 - Sathishunique
时,像这样xf <- factor(x, levels = c("a", "b", "c", "d"), labels = unique(c("a", "a", "a", "d")))
,那么您将会得到一个错误,因为级别和标签参数的长度冲突。 - Sathishlength(levels) = length(labels)
。如果您看到函数factor
的用法,它表示levels = labels
,这暗示标签参数中的值将被分配给 levels 参数。请检查此代码xf <- factor(x, labels = unique(c("a", "a", "a", "d", "b", "c")))
。 - Sathishfactor()
- 创建;levels()
- 修改。 - Sathishfactor()
参数:1.levels
- 指示不同的类别;2.labels
- 根据levels
参数中指定的名称更改类别的名称;3.exclude
- 从变量中删除一个类别。 - Sathish