R:知道列表中有多少向量包含一个值
我有一个单词向量列表,叫做句子列表R:知道列表中有多少向量包含一个值,r,list,match,R,List,Match,我有一个单词向量列表,叫做句子列表 s1=sample(letters,size = 5,replace = FALSE) s2=sample(letters,size = 7,replace = FALSE) s3=sample(letters,size = 3,replace = FALSE) list_of_sentences=list(s1,s2,s3) 假设,我想知道有多少个句子包含“a”这个词。知道我有一个由6000个单词组成的50000个句子的列表,你会怎么做。基本上,我正在寻找
s1=sample(letters,size = 5,replace = FALSE)
s2=sample(letters,size = 7,replace = FALSE)
s3=sample(letters,size = 3,replace = FALSE)
list_of_sentences=list(s1,s2,s3)
假设,我想知道有多少个句子包含“a”这个词。知道我有一个由6000个单词组成的50000个句子的列表,你会怎么做。基本上,我正在寻找%in%函数的“矢量化”版本,以便运行如下操作:
vectorized_match_fun("a",list_of_sentences)
TRUE FALSE TRUE FALSE FALSE FALSE FALSE ...
您可以使用Lappy:
vectorized_match_fun <- function(list_input, matched_word){
unlist(lapply(list_input,function(x){
matched_word %in% x
}))
}
vectorized_match_fun(list_of_sentences,"a")
[1] FALSE TRUE FALSE
vectorized_match_fun(list_of_sentences,"x")
[1] FALSE FALSE TRUE
矢量化匹配\u fun您可以使用Lappy:
vectorized_match_fun <- function(list_input, matched_word){
unlist(lapply(list_input,function(x){
matched_word %in% x
}))
}
vectorized_match_fun(list_of_sentences,"a")
[1] FALSE TRUE FALSE
vectorized_match_fun(list_of_sentences,"x")
[1] FALSE FALSE TRUE
矢量化匹配\u fun您可以在apply函数中运行%
中的%
set.seed(13)
s1=sample(letters,size = 5,replace = FALSE)
s2=sample(letters,size = 7,replace = FALSE)
s3=sample(letters,size = 3,replace = FALSE)
list_of_sentences=list(s1,s2,s3)
vapply(list_of_sentences,
function(x, find) any(find %in% x),
"a",
FUN.VALUE = logical(1))
根据您对另一个答案的评论,我将指出,%
中的%接受两边的向量。我提供的答案允许您利用这一点,但仍然只返回一个逻辑值,指示是否找到匹配项。但是,我不能100%确定这是您想要的,因为您还没有提供如何处理多个单词搜索的示例输出
但是考虑一下
vapply(list_of_sentences,
function(x, find) any(find %in% x),
find = c("a", "x"),
FUN.VALUE = logical(1))
您可以在应用函数中运行%
中的%
set.seed(13)
s1=sample(letters,size = 5,replace = FALSE)
s2=sample(letters,size = 7,replace = FALSE)
s3=sample(letters,size = 3,replace = FALSE)
list_of_sentences=list(s1,s2,s3)
vapply(list_of_sentences,
function(x, find) any(find %in% x),
"a",
FUN.VALUE = logical(1))
根据您对另一个答案的评论,我将指出,%
中的%接受两边的向量。我提供的答案允许您利用这一点,但仍然只返回一个逻辑值,指示是否找到匹配项。但是,我不能100%确定这是您想要的,因为您还没有提供如何处理多个单词搜索的示例输出
但是考虑一下
vapply(list_of_sentences,
function(x, find) any(find %in% x),
find = c("a", "x"),
FUN.VALUE = logical(1))
是的,你说得对,但是我担心这个方法需要太多的时间,因为我想计算6000字的这种运算。但如果这是唯一的解决方案,我会这样做…是的,你说得对,但我担心这个方法需要太多时间,因为我想计算6000字的这种运算。但是,如果这是唯一的解决方案,我会这样做…哇不知道这个吸血鬼功能。看起来棒极了。我要检查一下。@Benjamin,你能给我解释一下其中的乐趣吗。VALUE=logical(1)?它告诉vapply
从函数的每次迭代中期望一个长度为1的逻辑向量。预先告诉R需要什么可以让它跳过一些内存分配,从而提高速度。您可以放弃FUN.VALUE
参数,改为使用sapply
获得相同的结果,但这将需要更多的处理器时间。Wow不知道这个vapply函数。看起来棒极了。我要检查一下。@Benjamin,你能给我解释一下其中的乐趣吗。VALUE=logical(1)?它告诉vapply
从函数的每次迭代中期望一个长度为1的逻辑向量。预先告诉R需要什么可以让它跳过一些内存分配,从而提高速度。您可以放弃FUN.VALUE
参数,改为使用sapply
获得相同的结果,但这需要更多的处理器时间。