R中组合的值不正确

问题描述 投票:1回答:1

使用R中的combinat包,我得到了错误的答案

dim(combn(9,9))[2]

我得到NULL而不是1

我不正确地使用包裹吗?或者是否有不同的包来解决这个问题?

r combinations
1个回答
2
投票

“我是否错误地使用了包裹?”

不,您没有错误地使用包裹。正如@joran所指出的那样,从simplifycombinat::combn参数的文档(其默认值为TRUE),这种行为是预期的:

如果simplify为FALSE,则返回一个列表; else返回一个向量或一个数组。

所以,在你的例子中,由于combinat::combn(9, 9)只有一个结果,所以返回一个向量,它没有像矩阵这样的属性(例如dim)。

“或者那里有不同的包来解决这个问题?”

是的,只需使用utils包作为R的标准库之一修复了这个问题(与combinat相同,simplify的默认值是TRUE):

## with utils
dim(utils::combn(9,9))[2]
[1] 1

再次,从utils::combn的文档我们(强调我的):

Scott Chasalow于1994年为S写了原文; R package combinat和Vince Carey的文档[email protected]; R核心团队的小变化,特别是在所有simple = TRUE的情况下返回ARRAY,例如,对于combn(5,5)。

请注意,它表示数组(R中的数组是一个带有附加属性的向量...此外,二维数组只是一个矩阵),并没有提到像combinat那样的向量。

为了彻底,这是utils::combnsimplify论证所说的:

逻辑指示结果是否应简化为数组(通常是矩阵);如果为FALSE,则该函数返回一个列表。请注意,默认情况下,当simplify = TRUE时,结果的维度只需从FUN(第一个组合)确定(出于效率原因)。如果FUN(u)长度不恒定,这将严重失败。

由于我们只有utils::combn(9, 9)的1个组合,我们得到一个有1列和9行的数组(即矩阵),因此调用dim()[2]会按预期返回1。

© www.soinside.com 2019 - 2024. All rights reserved.