gpt4 book ai didi

r - 检查 R 向量中的序列

转载 作者:行者123 更新时间:2023-12-05 02:07:35 24 4
gpt4 key购买 nike

我正在寻找一个函数或操作,如果我有

A <- c(1, 2, 3, 4, 5)

B <- c(1, 2, 3)

C <- c(2, 1)

当检查 A 是否包含 B 时我会得到 TRUE,而当检查 A 是否包含 C 时我会得到 FALSE

基本上,相当于 %in% 运算符,但它实际上关心元素的顺序

在一个完美的世界里,我可以在没有某种 apply 的情况下做到这一点声明,但我可能最终不得不

最佳答案

好吧,如果允许使用某种应用循环,那么这可能会起作用:

"%seq_in%" = function(b,a) any(sapply(1:(length(a)-length(b)+1),function(i) all(a[i:(i+length(b)-1)]==b))) 

(由于 John Coleman 的错误发现而编辑!)

编辑 2:我也忍不住尝试解决“非连续”案例:

# find_subseq() returns positions within vec of ordered elements of x, or stops with NA upon failing
find_subseq = function(x,vec) {
p=match(x[1],vec)
if(is.na(p)||length(x)==1){ p }
else { c(p,p+find_subseq(x[-1],vec[-seq_len(p)])) }
}
"%seq_somewhere_in%" = function(b,a) all(!is.na(find_subseq(b,a)))

例子:

1:3 %seq_in% 1:10
[1] TRUE
c(3,1,2) %seq_in% 1:10
[1] FALSE
c(1,2,3) %seq_in% c(3,2,1,2,3)
[1] TRUE
2:1 %seq_in% c(1,2,1)
[1] TRUE
1:3 %seq_somewhere_in% c(1,10,10,2,10,10,10,3,10)
[1] TRUE

关于r - 检查 R 向量中的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61620689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com