“'pattern'必须是非空字符串”,R中的agrep错误

时间:2014-02-20 00:00:02

标签: r lapply sapply agrep

我收到以下错误:

'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之间的整数。

1 个答案:

答案 0 :(得分:3)

我可以通过向模式提供""来获取该错误消息。如此处所示,但没有其他可能不好的模式:

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

这将告诉您错误的位置,然后您可以磨练该元素并找出导致它的原因。我会尝试多个数据子集。