合并不合格因子变量

时间:2013-09-04 14:00:35

标签: r syntax

更新:已修复

这已在即将发布的R 3.1.0中修复。来自CHANGELOG:

  

combn(x, simplify = TRUE)现在给出因子输入的因子结果   x(以前是用户错误)。
  与PR#15442

相关

我刚注意到一件奇怪的事情。为什么combn似乎将factor变量解除隐藏为除第一个组合之外的所有的基础数值?

x <- as.factor( letters[1:3] )

combn( x , 2 )
#     [,1] [,2] [,3]
#[1,] "a"  "1"  "2" 
#[2,] "b"  "3"  "3" 

x是字符时不会发生这种情况:

x <- as.character( letters[1:3] )

combn( x , 2 )
#     [,1] [,2] [,3]
#[1,] "a"  "a"  "b" 
#[2,] "b"  "c"  "c"

可在OS X 10.7.5和Windows 7上的R64上重现。

3 个答案:

答案 0 :(得分:2)

我认为这是由于matrix参数转换为simplify所致。如果你不使用它,你会得到:

combn( x , 2 , simplify=FALSE)
[[1]]
[1] a b
Levels: a b c

[[2]]
[1] a c
Levels: a b c

[[3]]
[1] b c
Levels: a b c

第一列正常的事实是由于combn的工作方式:第一列是单独指定的,然后使用[<-从现有矩阵更改其他列。考虑:

m <- matrix(x,3,3)
m[,2] <- sample(x)
m
     [,1] [,2] [,3]
[1,] "a"  "1"  "a" 
[2,] "b"  "3"  "b" 
[3,] "c"  "2"  "c" 

我认为违规函数是[<-

答案 1 :(得分:1)

正如康拉德所说,因素的处理往往是奇怪的,或者至少是不一致的。在这种情况下,我认为行为很奇怪,构成一个错误。试试submitting it,看看回复是什么。

由于结果是矩阵,并且没有因子矩阵类型,我认为正确的行为是将因子输入转换为函数开头附近的某个字符。

答案 2 :(得分:0)

我遇到了同样的问题。强制回到combn命令中的字符向量似乎有效:

 > combn(as.character(x),2)

     [,1] [,2] [,3]
[1,] "a"  "a"  "b" 
[2,] "b"  "c"  "c"