我正在尝试创建一个函数,检查向量的所有元素是否出现在字符串向量中。测试代码如下:
test_values = c("Alice", "Bob")
test_list = c("Alice,Chris,Mark", "Alice,Bob,Chris", "Alice,Mark,Zach", "Alice,Bob,Mark", "Mark,Bob,Zach", "Alice,Chris,Bob", "Mark,Chris,Zach")
我希望此输出为FALSE TRUE FALSE TRUE FALSE TRUE FALSE
。
我首先想到我可以在命令|
中切换&
到grepl(paste(test_values, collapse='|'), test_list)
,以便当Alice和Bob 两者时字符串而不是其中任何一个出现时,但我无法得到正确的答案。
我也不想使用命令:grepl(test_values[1], test_list) & grepl(test_values[2], test_list)
,因为test_values
向量将动态变化(从长度0变为3),所以我正在寻找一些可以考虑这一点的东西。
答案 0 :(得分:7)
我们可以将Reduce
与grepl
Reduce(`&`, lapply(test_values, grepl, test_list))
#[1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE