寻找连续的运行

时间:2016-02-24 08:09:24

标签: r

我来自制药背景。我是编码新手。我开始阅读这本书" R编程的艺术!"我及时了解它的概念。好吧,我坚持使用名为"找到连续运行的主题。"在特定示例中,存在向量(1,0,0,1,1,1,0,1,1),从中可以找到1的数量。如果我们想要连续找到两个1,则代码应该返回值(4,5,8) 我无法理解书中描述的代码。

findruns <- function(x,k) {
   n <- length(x)
   runs <- NULL
   for (i in 1:(n-k+1)) {
       if (all(x[i:(i+k-1)]==1)) runs <- c(runs,i)
    }
   return(runs)
   }

我有问题清单.. 1.这个x和k在第1行是什么意思。 2.为什么我们需要为运行分配NULL 3.第4行和第5行究竟是什么意思!

PS:我知道我的问题很容易回答,因为它从本书的最初部分开始!

1 个答案:

答案 0 :(得分:2)

我们可以使用stri_locate_all获取连续元组的索引。我们paste vector'v1'为单个字符串,并使用正则表达式外观((?=11))来匹配模式。 stri_locate_all给出11所有元组的“开始”和“结束”索引。在这里,我只提取了start列([,1]

library(stringi)
stri_locate_all(paste(v1, collapse=""), regex="(?=11)")[[1]][,1]
#[1] 4 5 8

关于OP的函数,它有两个输入变量'x'和'k',其中'x'代表向量('v1'),'k'是元组长度,我猜是2。我们分配' n'作为向量的length,创建一个NULL向量'runs'来分配输出索引。然后,我们循环遍历向量的序列,直到第6个元素(n-k+1),并且对于每个'i',我们再次将序列从'i'开始到i+k-1,即如果'i' '是1,索引将是'2',序列是1:2,得到向量中的元素对应于v1[1:2],检查它是否等于1,如果{{1}元素为1,然后我们将'runs'与相应的索引('i')

连接起来

数据

all