2015-10-27 3 views
-3

Вот мой сценарий:Ошибка в R grepl?

a<-list("abcd") 
b<-list("abcd_efgh") 
c<-"abcd" 
d<-"abcd_efgh" 

if(grepl(a,b,fixed=TRUE)) 
{ 
    print("bug?") 
} 

if(grepl(c,d,fixed=TRUE)) 
{ 
    print("bug?") 
} 

И мой выход:

> source('~/.active-rstudio-document') 
[1] "bug?" 
[1] "bug?" 

Поскольку я обеспечил 'фиксированный = TRUE', я запутался, что я пропускаю. Это ошибка в grepl-людях?

+2

Почему вы думаете, что это ошибка? Это ожидаемое поведение. –

+2

Я уверен, что это ожидаемое поведение. в вашем первом сравнении вы ищете '' abcd '' в '' abcd_efgh''. Вы считали, что выполняете 'grepl (b, a, fixed = TRUE)'? – Benjamin

+2

Это нормальное поведение. Посмотрите на '? Grepl'. – Jaap

ответ

1

Это ожидаемое поведение, см grepl documentation:

grepl(pattern, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)

pattern
строка символов, содержащая регулярное выражение (или строку символов для fixed = TRUE), чтобы быть согласованный в данном символе вектор. Прибегает к as.character символьной строке, если это возможно. Если предоставляется вектор символов длиной 2 или более, первый элемент используется с предупреждением. Недопустимые значения допустимы, за исключением regexpr и gregexpr.

fixed
логично. Если TRUE, шаблон является строкой, которая должна быть сопоставлена ​​как. Переопределяет все конфликтующие аргументы.

Итак, вы ищете abcd в abcd_efgh, который true. Вы не требуете полного соответствия при настройке fixed=TRUE, все символы, используемые в шаблоне, не могут быть метасимволами регулярных выражений.

+0

Я рассмотрел, как объяснение ясно, но я все еще сомневаюсь в том, что этот вопрос, о котором плохо сказано, должен быть дан. Просто мое мнение. – Tensibai

+0

Это не выглядит так плохо для меня. В этом году я видел гораздо более бедные вопросы. Мне ясно, что OP хочет обеспечить полное совпадение строк (как с совпадением строк String # в Java). –

+0

На мой взгляд, вопрос о том, что-то ошибка, когда не указано, что ожидалось, плохо написано. Как уже говорилось выше, ваш ответ звучит хорошо для меня, объясняя документ, но вы должны были догадаться, что ожидал OP (и, возможно, это неправильно, и это не то, о чем спрашивает OP) – Tensibai