my_array = c(5,9,11,10,6,5,9,13) > my_array [1] 5 9 11 10 6 5 9 13 > m-6ren">
gpt4 book ai didi

r - R中没有 "multiple match vector"函数吗?

转载 作者:行者123 更新时间:2023-12-04 03:12:46 24 4
gpt4 key购买 nike

我试图找到一个“现成的”函数来执行以下操作:

> my_array = c(5,9,11,10,6,5,9,13)
> my_array
[1] 5 9 11 10 6 5 9 13
> my_test <- c(5, 6)
> new_match_function(my_test, my_array)
[1] 1 5 6
# or instead, maybe:
# [[1]]
# [1] 1 6
# [[2]]
# [1] 5

就我的目的而言,%in% 已经足够接近了,因为它将返回:

> my_array %in% my_test
[1] TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE

我可以这样做:

> seq(length(my_array))[my_array %in% my_test]
[1] 1 5 6

但似乎 match 之类的东西应该提供这种能力:一种从匹配中返回多个元素的方法。


如果我只是创建一个包来提供这个解决方案,它就不会被强烈采用(有充分的理由......这个小用例不值得安装一个包)。

是否有可用的解决方案?如果没有,我可以在哪里添加它?正如我所展示的,无需新函数即可轻松解决问题,但对于 match 而言,不允许进行多次匹配似乎很疯狂。理想情况下,我想:

  1. 发现我错了并且有一个直接的函数可以完成这个,或者
  2. 能够改变 match 本身,以便它可以返回多次出现。

但我的印象(无论对错)是对 base 代码的任何调整都比它们的值(value)更麻烦。

最佳答案

对于简单的情况,which(my_array %in% my_test)lapply(my_test, function(x) which(my_array==x)) 工作正常,但是这些都不是最有效的。

对于第一种情况(只知道哪些匹配,不知道它们对应于哪些元素),使用 fastmatch 包可能会有所帮助,它有 %fin%(快入)函数,保留数组的哈希表,以便后续查找更高效。

对于第二种情况,S4Vectors-bioconductor-package 中有findMatches。 ( https://bioconductor.org/packages/release/bioc/html/S4Vectors.html )

请注意,此函数不返回列表,而是返回 hits 对象。要获得列表,您还需要 buioconductor IRanges 包(并使用 as.list)。 ( https://bioconductor.org/packages/release/bioc/html/IRanges.html )

关于r - R中没有 "multiple match vector"函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697442/

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