r - 找到一个向量的前 n 个元素,其中包含另一个向量的所有元素
问题描述
给定两个向量vecA
和vecB
,我想找到最小的n
这样
all(vecB %in% vecA[1:n])
是TRUE
。
这是一个紧密的内循环,所以速度会很好。显然我可以
n <- NA_integer_
for (i in seq_along(vecA)) {
if (all(vecB %in% vecA[1:i])) {
n <- i
break
}
}
但是有更快/更优雅的方式吗?
您可以使用的一件事:vecB
总是将是形式的序列1:M
。
n
这是一个应该等于 5的示例:
vecB <- 1:3
vecA <- c(1, 2, 2, 1, 3, 2)
解决方案
一种选择可能是:
max(match(vecB, vecA))
不同情况的结果:
vecB <- 1:3
vecA <- c(1, 2, 2, 1, 3, 2)
[1] 5
vecB <- 1:3
vecA <- c(3, 2, 2, 1)
[1] 4
vecB <- 1:3
vecA <- c(2, 2, 1)
[1] NA
推荐阅读
- django - 让 django 在 docker-compose 中使用 `network_mode: host`
- cygwin - Q:镜像下载步骤cygwin安装报错怎么处理?
- angular - 无法绑定到“ngForOf”,因为在子模块的组件中访问 *ngFor 时它不是“div”的已知属性
- javascript - 关于 concole.log 中显示错误时的行为
- python - 如何在列表列表中生成随机数
- python - 如何检查处理 Celery 任务的队列
- bash - 用于取消当前(以及所有后续)脚本的 Bash 退出选项
- node.js - “ReplyError: ERR unkown command 'json.set' ? 使用 redis rejson, google oauth
- amazon-web-services - 具有定义持续时间的现场实例和多种实例类型的 AWS Auto Scaling 组
- unity3d - 全息远程无法统一捕捉手势