Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:知道列表中有多少向量包含一个值_R_List_Match - Fatal编程技术网

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
获得相同的结果,但这需要更多的处理器时间。