创建一个向量х
set.seed(1)
x <- cumsum(rnorm(10))
plot(x,t="b")
现在让我们创建它的逻辑模式。我的意思是,我们只取一个向量х,从中选择两个点并通过逻辑条件将它们相互比较(第一个点大于第二个点?答案TRUE/FALSE),因此我们对 for 中两个点的所有可能组合进行х
排序这个我写了一个简单的函数to.logyc
to.logyc <- function(x){
cmb <- combn(length(x),2) # сзд. все комбинации индексов
logic.pattern <- rep(NA,ncol(cmb))
for(i in 1:ncol(cmb)){
i1 <- cmb[1,i]
i2 <- cmb[2,i]
logic.pattern[i] <- x[i1] > x[i2]
}
return(logic.pattern)
}
to.logyc在向量上运行函数Х
to.logyc(x)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[33] FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
在输出我们得到了向量的逻辑向量(逻辑模式)Х
现在问题本身是如何Х根据这种逻辑模式恢复/重建风以获得这样的东西
rezult.pattern <- c(1,2,5,4,3,9,8,7,6,10)
plot(rezult.pattern,t="b")
可以比较,从逻辑的角度来看,模式是相同的
orig.logyc <- to.logyc(x)
reconst.logyc <- to.logyc(rezult.pattern)
all( orig.logyc == reconst.logyc)
[1] TRUE


为了得到你想要的,你需要保存的不是两个状态——“大于”/“不超过”,而是三个——“小于”/“等于”/“大于”。并且用你现在所拥有的,你可以获得最多这样一个向量:
0 0 2 1 0 3 2 1 0 0.获取示例:
ps 要获得与问题作者相同的伪随机序列,我必须更改 psch 生成器使用的算法:
默认情况下,我有这个(版本
r- 3.5.2):见功能帮助
RNGkind():