6

更新:已修复

这已在即将发布的 R 版本中修复3.1.0。从变更日志:

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 上重现。

4

3 回答 3

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" 

因此,我认为有问题的功能是[<-.

于 2013-09-04T14:26:43.873 回答
1

正如康拉德所说,对因素的处理往往很奇怪,或者至少是不一致的。在这种情况下,我认为这种行为很奇怪,足以构成一个错误。尝试提交它,看看响应是什么。

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

于 2013-09-04T14:25:57.587 回答
0

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

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

     [,1] [,2] [,3]
[1,] "a"  "a"  "b" 
[2,] "b"  "c"  "c" 
于 2014-03-28T17:47:14.343 回答