【发布时间】:2018-05-27 11:59:51
【问题描述】:
我正在尝试在 R 中获取序列 [1:n] 的所有可能拆分,例如:
getSplits(0,3)
应该返回序列 123 的所有可能拆分,换句话说(在向量列表中):
[1] 1
[2] 1 2
[3] 1 2 3
[4] 1 3
[5] 2
[6] 2 3
[7] 3
现在我创建了一个函数,它可以递归地访问这些向量,但无法将它们组合成一个,如上所述。我的功能是:
getSplits <- function(currentDigit, lastDigit, split) {
splits=list();
for (nextDigit in currentDigit: lastDigit)
{
currentSplit <- c(split, c(nextDigit));
print(currentSplit);
if(nextDigit < lastDigit) {
possibleSplits = c(list(currentSplit), getSplits(nextDigit+1, lastDigit, currentSplit));
}else{
possibleSplits = currentSplit;
}
splits <- c(splits, list(possibleSplits));
}
return(splits);
}
打印每个 currentSplit 会产生我需要的所有正确向量,但最终的返回列表(拆分)以某种方式将它们嵌套到更深层次的列表中,返回:
[1] 1
[[1]][[2]]
[[1]][[2]][[1]]
[1] 1 2
[[1]][[2]][[2]]
[1] 1 2 3
[[1]][[3]]
[1] 1 3
[[2]]
[[2]][[1]]
[1] 2
[[2]][[2]]
[1] 2 3
[[3]]
[1] 3
对于对应的函数调用getSplits(1, 3, c())。
如果有人能帮助我按照我上面描述的方式工作,将不胜感激!
【问题讨论】:
-
代码中不需要分号。此外,如果 splits 已经是一个列表,那么您可能只需要
c(splits, possibleSplits)。最后,您可以使用combn作为生成此函数的函数,对1:3进行lapply处理。我现在太忙了,但是 SO 上存在类似的问题。
标签: r list recursion vector sequence