% in% возвращает FALSE, когда я знаю, что TRUE - PullRequest
0 голосов
/ 24 апреля 2018

Соответствующие файлы:

Biggie

положительный

Я работаю над обработкой естественного языка и пытаюсь проверить, находится ли слово в одном списке в другом, используя проверку% in%. Проблема в том, что он возвращает все как ЛОЖЬ, когда я знаю, что должно быть хотя бы несколько ИСТИННЫХ возвратов. Мне интересно, проблема в типе объектов, с которыми я работаю? Хотя, когда я запускаю тесты, все является символьным объектом, поэтому я подумал, что это не должно быть проблемой. Вот мой код:

library(dplyr)
library(tokenizers)
library(tidytext)

biggie <- read.csv("C:/Users/My.Name/Desktop/biggie.csv", stringsAsFactors=FALSE)

colnames(biggie)[1] <- 'biggie'



bigsplit <- biggie %>% 
  unnest_tokens(word, biggie)

pos <- read.csv("C:/Users/My.Name/Desktop/positive.csv", stringsAsFactors = FALSE)

positive <- function(data){
  pos_count <- 0
  for(i in 1:nrow(data)){
    if (data[i,1] %in% pos){
      pos_count = pos_count + 1
    }
  }
  return(pos_count/nrow(data)
}

Здесь я нашел обходной путь, но я чувствую, что он добавляет ненужные циклы / шаги в функцию и отнимает гораздо больше вычислительной мощности, чем хотелось бы:

#Tests
bigsplit[1,1] = "abound"
bigsplit[1,1] %in% pos #Returns FALSE, but I would expect TRUE
bigsplit[1,1] %in% pos[1,1] #Returns TRUE

#NEW FUNCTION
positive <- function(data){
  pos_count = 0
  for(i in 1:nrow(data)){
    match_this <- data[i,1]
    for(i in 1:nrow(pos)){
      if(match_this %in% pos[i,1]){
        pos_count <- pos_count + 1
      }
    }
  }
  return(pos_count/nrow(data))
}

Если у кого-нибудь есть какие-либо советы по этим вопросам, я был бы очень рад их услышать. Спасибо!

...