这已在即将发布的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上重现。
答案 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"