2016-10-13 2 views
0

list_of_sentences라는 단어 벡터 벡터 목록이 있습니다.R : 목록에서 얼마나 많은 벡터가 포함되어 있는지 알 수 있습니다.

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"라는 단어가 몇 개 있는지 알고 싶습니다. 6,000 단어로 작성된 5 만 문장의 목록이 있다는 것을 알고 어떻게 할 수 있습니까? 당신은 lapply 사용할 수

vectorized_match_fun("a",list_of_sentences) 
TRUE FALSE TRUE FALSE FALSE FALSE FALSE ... 

답변

2

당신은 적용 함수 내에서 %in%를 실행할 수 있습니다 .

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)) 

다른 답변에 대한 귀하의 의견을 바탕으로, 나는 %in% 양쪽에 벡터를 허용 함을 지적 할 것이다. 내가 제공 한 대답은 이것을 활용할 수는 있지만, 일치하는 것이 있는지를 나타내는 단일 논리 만 반환합니다. 그러나 여러 단어 검색을 처리하는 방법에 대한 샘플 출력을 제공하지 않았으므로 원하는 내용을 100 % 확신 할 수는 없습니다.

vapply(list_of_sentences, 
      function(x, find) any(find %in% x), 
      find = c("a", "x"), 
      FUN.VALUE = logical(1)) 
+0

와우는이 vapply 기능을 알지 못했습니다. 멋져 보입니다. 나는 그것을 검사 할 것이다. –

+0

그건 사실 정말 멋지다! –

+0

@ 벤자민, FUN.VALUE = logical (1)을 설명해 주시겠습니까? –

2

: 기본적으로 내가 좋아하는 뭔가를 실행하기 위해 % 함수 %의 "벡터화"버전을 찾고 있어요

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 
+0

그러나 고려 그래 당신이 바로,하지만 난 6,000 단어를 작동 이런 종류의 계산을 원하기 때문에이 방법은 너무 많은 시간이 소요 두려워. 그러나 이것이 유일한 해결책이라면, 나는 그것을 할 것입니다 ... –

관련 문제