使用R中的combinat
包,我得到了错误的答案
dim(combn(9,9))[2]
我得到NULL
而不是1
我不正确地使用包裹吗?或者是否有不同的包来解决这个问题?
“我是否错误地使用了包裹?”
不,您没有错误地使用包裹。正如@joran所指出的那样,从simplify
的combinat::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::combn
为simplify
论证所说的:
逻辑指示结果是否应简化为数组(通常是矩阵);如果为FALSE,则该函数返回一个列表。请注意,默认情况下,当simplify = TRUE时,结果的维度只需从FUN(第一个组合)确定(出于效率原因)。如果FUN(u)长度不恒定,这将严重失败。
由于我们只有utils::combn(9, 9)
的1个组合,我们得到一个有1列和9行的数组(即矩阵),因此调用dim()[2]
会按预期返回1。