R组合序列生成
我试图生成一个矩阵,其中每列表示R中的一系列因子。这些因子可以采用值1、2、3或4。每个序列有13个元素,表明总共有4^13个潜在序列。然而,只有这些潜在序列的特定子集被认为是有效的。逻辑如下:R组合序列生成,r,math,R,Math,我试图生成一个矩阵,其中每列表示R中的一系列因子。这些因子可以采用值1、2、3或4。每个序列有13个元素,表明总共有4^13个潜在序列。然而,只有这些潜在序列的特定子集被认为是有效的。逻辑如下: 序列可以从任何因素开始 如果序列从4开始,其第二个元素可以小于或等于4 一旦一个元素降到4以下,随后的条目必须弱递增 如果序列以1、2或3开头,则它必须是弱递增的 例如,序列(1,2,3,3,3…..3)是有效的。序列(4,4,1,1,2,4,4…4)也是有效的。序列(4,1,2,3,1,1…1)并非如
如果你们中的任何一位能够深入了解我如何生成这些有效序列,我们将不胜感激。谢谢。我假设,一旦一个逐渐增加的向量达到4,它就不能像4是第一个数字那样再次跳回到更低的值(如果可以,代码实际上更容易) 下面的函数生成兼容序列,基本上使用
开关
实现马尔可夫链
generate_seq我假设,一旦一个逐渐增加的向量达到4,它就不能像4是第一个数字那样再次跳回到更低的值(如果可以,代码实际上更容易)
下面的函数生成兼容序列,基本上使用开关
实现马尔可夫链
generate_seq我认为您可以使用RcppAlgos
为长度为1:n的向量生成组合,从而有效地实现这一点(假设较短的向量用4
填充到长度为13):
库(RcppAlgos)
get_combos我认为您可以使用RcppAlgos
为长度为1:n的向量生成组合,从而有效地实现这一点(假设较短的向量用4
填充到长度为13):
库(RcppAlgos)
这是很棒的艾伦,谢谢你!我可以生成大量列,然后删除重复项以获得完整的序列集合。我可以将其保存为.csv文件,并在需要时调用该文件。我认为这是不正确的,因为它没有考虑到如果第二个元素是4,则序列可以放在第二个元素之后(即OP声明(4,4,1,1,2,4,4…4)
是有效序列)。这是正确的,只要所有先行元素都是4s,序列就可以删除。例如,如果序列的前5个元素都是4s,那么第六个元素可以是1、2、3或4。一旦一个序列从4下降,剩下的元素一定是微弱地增加了。@27ñ9 Thanjs-我想我错过了。但是,这不会使函数生成的任何序列出错;这只意味着它遗漏了一小部分样本空间。将if(x[i+1]==4)
更改为if(x[i+1]==4&!all(x==4))
可以解决这个问题。是的,对不起,这并不意味着生成的序列是错误的,只是它不能用来生成OP想要的详尽列表。这是非常好的Allan,谢谢!我可以生成大量列,然后删除重复项以获得完整的序列集合。我可以将其保存为.csv文件,并在需要时调用该文件。我认为这是不正确的,因为它没有考虑到如果第二个元素是4,则序列可以放在第二个元素之后(即OP声明(4,4,1,1,2,4,4…4)
是有效序列)。这是正确的,只要所有先行元素都是4s,序列就可以删除。例如,如果序列的前5个元素都是4s,那么第六个元素可以是1、2、3或4。一旦一个序列从4下降,剩下的元素一定是微弱地增加了。@27ñ9 Thanjs-我想我错过了。但是,这不会使函数生成的任何序列出错;这只意味着它遗漏了一小部分样本空间。将if(x[i+1]==4)
更改为if(x[i+1]==4&!all(x==4))
可以解决这个问题。是的,很抱歉,这并不意味着生成的序列是错误的,只是它不能用于生成OP想要的详尽列表。
set.seed(4)
matrix(replicate(4, generate_seq(13)), ncol = 4)
#> [,1] [,2] [,3] [,4]
#> [1,] 4 4 1 1
#> [2,] 3 3 1 2
#> [3,] 3 4 2 3
#> [4,] 3 4 2 3
#> [5,] 4 4 2 4
#> [6,] 4 4 3 4
#> [7,] 4 4 3 4
#> [8,] 4 4 3 4
#> [9,] 4 4 4 4
#> [10,] 4 4 4 4
#> [11,] 4 4 4 4
#> [12,] 4 4 4 4
#> [13,] 4 4 4 4
library(RcppAlgos)
get_combos <- function(n) {
unique(do.call(rbind, sapply(rev(seq(n)), function(x)
do.call(
cbind, c(rep(4, n - x), list(comboGeneral(1:4, x, TRUE)))
))))
}
res <- get_combos(13)
head(res)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1 1 2
[3,] 1 1 1 1 1 1 1 1 1 1 1 1 3
[4,] 1 1 1 1 1 1 1 1 1 1 1 1 4
[5,] 1 1 1 1 1 1 1 1 1 1 1 2 2
[6,] 1 1 1 1 1 1 1 1 1 1 1 2 3
nrow(res)
[1] 2367