gpt4 book ai didi

r - 迷失在 R 中使用 which() 和正则表达式

转载 作者:行者123 更新时间:2023-12-02 15:18:16 25 4
gpt4 key购买 nike

好的,我有一个小问题,我相信我可以用 whichgrepl 解决(欢迎使用替代方案),但我迷路了:

my_query<- c('g1', 'g2', 'g3')
my_data<- c('string2','string4','string5','string6')

我想返回 my_query 中匹配 my_data 的索引。在上面的示例中,mydata 中只有 'g2',因此示例中的结果将为 2

最佳答案

在我看来,没有循环就没有简单的方法可以做到这一点。对于 my_query 中的每个元素,我们可以使用以下任一函数来获取 TRUEFALSE:

f1 <- function (pattern, x) length(grep(pattern, x)) > 0L

f2 <- function (pattern, x) any(grepl(pattern, x))

例如,

f1(my_query[1], my_data)
# [1] FALSE
f2(my_query[1], my_data)
# [1] FALSE

然后,我们使用*apply 循环将f2 应用于my_query 的所有元素:

which(unlist(lapply(my_query, f2, x = my_data)))
# [1] 2

Thanks, that seems to work. To be honest, I preferred to your one-line original version. I am not sure why you edited with creating another function to call afterwards with *apply. Is there any advantage as compared to which(lengths(lapply(my_query, grep, my_data)) > 0L)?

嗯,我不完全确定。当我阅读 ?lengths 时:

 One advantage of ‘lengths(x)’ is its use as a more efficient
version of ‘sapply(x, length)’ and similar ‘*apply’ calls to
‘length’.

我不知道lengthssapply 效率高多少。无论如何,如果它仍然是一个循环,那么我最初的建议是 which(lengths(lapply(my_query, grep, my_data)) > 0L) 执行 2 个循环。我的编辑基本上是将两个循环组合在一起,希望能得到一些提升(如果不是太小的话)。

您仍然可以将我的新编辑安排在一行中:

which(unlist(lapply(my_query, function (pattern, x) any(grepl(pattern, x)), x = my_data)))

which(unlist(lapply(my_query, function (pattern) any(grepl(pattern, my_data)))))

关于r - 迷失在 R 中使用 which() 和正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39046760/

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