我来自制药背景。我是编码新手。我开始阅读这本书" 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:我知道我的问题很容易回答,因为它从本书的最初部分开始!
答案 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