Я получаю ошибку, когда я использую grepl с пастой.Неверное регулярное выражение - PullRequest
0 голосов
/ 18 июня 2019

Я использую следующий код для сопоставления элементов двух столбцов,

test = articles[apply(articles, 1, function(i) any(grepl(paste(dictionary, collapse = "|"), i))),]

и появляется следующая ошибка:

Error in grepl(paste(dictionary, collapse = "|"), i) : 
  invalid regular expression '3 M SYNDROME|3-M SYNDROME|3-M SYNDROME 1|3M SYNDROME|DOLICHOSPONDYLIC DYSPLASIA|GLOOMY FACE SYNDROME|LE MERRER SYNDROME|THREE M SYNDROME|YAKUT SHORT STATURE SYNDROME|ABDOMINAL AORTIC ANEURYSM|ANEURYSM ABDOMINAL AORTIC|AORTIC ANEURYSM ABDOMINAL|AORTIC ANEURYSM FAMILIAL ABDOMINAL 1|ABSENCE EPILEPSY|ABSENCE SEIZURE|CHILDHOOD ABSENCE EPILEPSY|JUVENILE ABSENCE EPILEPSY|PETIT MAL SEIZURE|PYKNOLEPSY|ACANTHAMOEBA INFECTION|

словарь состоит из названий болезней и синонимов:

   [1] "3 M SYNDROME"                                                                
   [2] "3-M SYNDROME"                                                                
   [3] "3-M SYNDROME 1"                                                              
   [4] "3M SYNDROME"                                                                 
   [5] "DOLICHOSPONDYLIC DYSPLASIA"                                                  
   [6] "GLOOMY FACE SYNDROME"                                                        
   [7] "LE MERRER SYNDROME"                                                          
   [8] "THREE M SYNDROME"                                                            
   [9] "YAKUT SHORT STATURE SYNDROME"                                                
  [10] "ABDOMINAL AORTIC ANEURYSM"                                                   
  [11] "ANEURYSM ABDOMINAL AORTIC"                                                   
  [12] "AORTIC ANEURYSM ABDOMINAL"                                                   
  [13] "AORTIC ANEURYSM FAMILIAL ABDOMINAL 1"                                        
  [14] "ABSENCE EPILEPSY"                                                            
  [15] "ABSENCE SEIZURE"                                                             
  [16] "CHILDHOOD ABSENCE EPILEPSY"                                                  
  [17] "JUVENILE ABSENCE EPILEPSY"                                                   
  [18] "PETIT MAL SEIZURE"                                                           
  [19] "PYKNOLEPSY"                                                                  
  [20] "ACANTHAMOEBA INFECTION"                                                      
  [21] "ACANTHAMOEBA INFECTIONS"                                                     
  [22] "ACANTHAMOEBA KERATITIS"                                                      
  [23] "ACCOMMODATIVE SPASM"

Здесь статья представляет собой фрейм данных, который состоит из различных статей. Словарь - это список фраз, которым я хочу соответствовать. Пожалуйста, помогите мне, где лежит ошибка?

1 Ответ

0 голосов
/ 18 июня 2019

Возможно, вы сможете использовать %in% вместо grepl, т.е.

test = articles[apply(articles, 1, function(i) any(i %in% dictionary)),]

. Это проверяет точное совпадение между вашим словарем и записями в articles.Если вы искали совпадения подстрок, вам следует использовать функцию str_detect из пакета stringr, помечая записи словаря как fixed, чтобы они не были неверно истолкованы как регулярные выражения:

test = articles[apply(articles, 1, function(i) any(stringr::str_detect(i, fixed(dictionary)))),]
...