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». Как бы вы это сделали, зная, что я получил список из 50 000 предложений, построенных из 6000 слов. В основном я ищу для «векторизованного» версии% в% функции для того, чтобы запустить что-то вроде:

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

Wow не знал эту функцию vapply. Выглядит потрясающе. Я собираюсь проверить это. –

+0

Это действительно здорово! –

+0

@Benjamin, не могли бы вы объяснить мне FUN.VALUE = logical (1)? –

2

Вы можете использовать lapply:

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

да вы правы, но я боюсь, что этот метод занимает слишком много времени, так как я хочу, чтобы вычислить этот вид работы на 6000 слов. Но если это единственное решение, я сделаю это ... –

Смежные вопросы