R函數grep
和!grep
(NOT grep)在邏輯上不一致;與邏輯上一致的grepl
和!grepl
(不是grepl)不同。當grep和!grepl在邏輯上一致時,爲什麼在R中grep&!grep在邏輯上不一致?
grepl
返回一個長度與正在搜索的項目數量相等的邏輯向量。例如,如果目標是在5項向量的項目2和3發現了以下則返回:
FALSE TRUE TRUE FALSE FALSE
如果grepl
由!grepl
替換,那麼「相反」邏輯結果返回:
TRUE FALSE FALSE TRUE TRUE
grep
,在另一方面返回找到的項目2個位置的向量:2 3
什麼在相同的情況下!grep
回報?從邏輯上講,它應該返回1 4 5
,而不是返回FALSE FALSE
。這怎麼可能是一個邏輯上一致的返回值?誰能解釋一下?
由於'grep'返回'integer's的0+載體中,'!'(倒相邏輯電路)操作者未在他們定義。你能肯定地告訴我什麼'invert_logic 5:7'意味着什麼? (如果你知道矢量的長度,那麼你可以推斷'1:4,8:n',但那是放肆的。)由於'grepl'返回一個0+的邏輯矢量,所以說' invert_logic c(T,T,F,T)',並且由於您使用相同長度的邏輯向量(倒置或其他)對索引進行索引,所以您很好。 (順便說一下:''[-grep(「[fh]」,letters]'實際上是反轉的。) – r2evans
嘗試'grep(...,invert = TRUE)'。我想這就是你想要的。 –
1)'grep '返回與模式匹配的索引,而'grepl'返回一個邏輯向量; 2)'!'操作符將其參數強制爲'logical'。例如,嘗試'!c(0,2,4)',你會發現它相當於'!as.logical(c(0,2,4))'; 3)檢查'grep'的'invert'參數。 – nicola