'шаблон' должен быть непустой строкой символов с ошибкой agrep в R.

Я получаю следующую ошибку:

'pattern' must be a non-empty character string 

при попытке запустить следующее:

rapply(as.list(Database1), function(x) agrep(x,Database2, max.distance=c(cost=1), value=T))

с большими базами данных

> length(Database1)
[1] 15876500

> length(Database2)
[1] 605

Но не тогда, когда я запускаю его с маленькими

> length(Database1)
[1] 29

> length(Database2)
[1] 8

Я знаю, что должен создать воспроизводимый код, чтобы базы данных представляли собой всего 15-25 строк символов случайных букв, которые можно сгенерировать, используя следующее:

Database1<- unlist(replicate(n, paste0(sample(LETTERS, m), collapse="")))

где «n» — длина, а «m» — целое число от 15 до 25.


person Tom A    schedule 20.02.2014    source источник
comment
Код воспроизводим, однако набор данных отсутствует, поэтому ошибка не может быть воспроизведена.   -  person Tyler Rinker    schedule 20.02.2014


Ответы (1)


Что ж, я могу получить это сообщение об ошибке, указав "" в шаблоне. как показано здесь, но не с другими потенциально плохими шаблонами:

agrep("", "hello")
agrep(" ", "hello")
agrep(NA, "hello")
agrep(NULL, "hello")


## > agrep("", "hello")
## Error in agrep("", "hello") : 
##   'pattern' must be a non-empty character string

## > agrep(" ", "hello")
## [1] 1

## > agrep(NA, "hello")
## [1] NA

## > agrep(NULL, "hello")
## Error in agrep(NULL, "hello") : invalid 'pattern' argument

Итак, я предполагаю, что вы получили "" в базе данных`. Для проверки используйте:

which(Database1 == "")

ИЗМЕНИТЬ:

Использовать:

rapply(as.list(Database1), function(x) {
    try(agrep(x,Database2, max.distance=c(cost=1), value=T))
)

Это скажет вам, где находятся ошибки, а затем вы сможете отточить этот элемент и выяснить, что его вызывает. Я бы попробовал несколько подмножеств данных.

person Tyler Rinker    schedule 20.02.2014
comment
Великолепно! В нем было много всего, поэтому я присвоил ему переменную: remove‹-what(Database1 == ), а затем Database1‹-Database1[-remove]. Но когда я повторно запустил Agrep, я получил ту же ошибку. - person Tom A; 20.02.2014
comment
Я буду продолжать играть с ним. Спасибо еще раз! - person Tom A; 20.02.2014
comment
Работал! Еще раз спасибо. - person Tom A; 23.02.2014