Функции R grep
и !grep
(NOT grep) не являются логически последовательными; в отличие от grepl
и !grepl
(НЕ grepl), которые логически согласованы.Почему в R grep &! Grep не логически последовательны, когда grepl и! Grepl Являются логически последовательными?
grepl
возвращает логический вектор, равный по длине количеству элементов, которые ищутся. Например, если цель находится в пунктах 2 и 3 вектора 5 пункта следующий возвращаются:
FALSE TRUE TRUE FALSE FALSE
Если grepl
заменяются !grepl
, то «обратный» логический результат возвращается:
TRUE FALSE FALSE TRUE TRUE
grep
, с другой стороны возвращает вектор из 2-х позиций найденных элементов: 2 3
Что !grep
возвращения в том же сценарии? Логически он должен возвращать 1 4 5
, вместо этого он возвращает FALSE FALSE
. Как это может быть логически последовательное возвращаемое значение? Может ли кто-нибудь объяснить?
Поскольку 'grep' возвращает 0+ вектор' integer's, то! '(Инвертирование) оператор' не определен на них. Можете ли вы с уверенностью сказать, что означает 'invert_logic 5: 7'? (Если вы знаете длину вектора, то вы можете вывести '1: 4,8: n', но это самонадеянно.) Поскольку' grepl' возвращает вектор 0+ 'logical', имеет смысл сказать ' invert_logic c (T, T, F, T) ', и поскольку вы индексируете вектор с вектором логики одинаковой длины (инвертированный или иным образом), вы хороши. (BTW: 'letters [-grep (" [fh] ", letters]' эффективно инвертирует.) – r2evans
Попробуйте 'grep (..., invert = TRUE)'. Я думаю, это то, что вы хотите. –
1) 'grep 'возвращает индексы, соответствующие шаблону, в то время как' grepl' возвращает логический вектор; 2) оператор '!' Принуждает свой аргумент к «логическому». Попробуйте '! C (0,2,4)' например, и вы увидите, что это эквивалентно '! As.logical (c (0,2,4))'; 3) проверьте аргумент 'invert'' grep'. – nicola