2014-09-12 3 views
1

Я хочу написать R-функцию (используя grep), которая позволяет мне делать точный шаблон, но мне трудно понять, как обозначить точный конец матча (используя $). Более конкретно, рассмотрим следующее:grep внутри внутри R-функция

data(mtcars) 
mtcars$a <- row.names(mtcars) 

mtcars[grep("Merc 450SL", mtcars$a), ] 
[1] "Merc 450SL" "Merc 450SLC" 

mtcars[grep("Merc 450SL$", mtcars$a), ] 
[1] "Merc 450SL"  

Итак, я хочу написать последний в функцию, где она включает точное соответствие шаблону, со знаком доллара. Я могу сделать простой поиск по шаблону (как в первом примере):

grep.f <- function(x){ 
     b <- grep(x, mtcars$a, fixed=TRUE) 
     print(mtcars[b,"a"]) 
     } 

grep.f("Merc 450SL") 
[1] "Merc 450SL" "Merc 450SLC" 

функция, очевидно, дроссели, когда я меняю вторую строку b <- grep(x$, mtcars$a, fixed = TRUE), но я застрял о том, как я должен сделать это.

Заранее благодарен!

+2

'Grep (paste0 (x, "$"), mtcars $ a, value = TRUE) ' – GSee

+0

Это действительно умно, а надежность ответов (размещенных за считанные секунды) потрясающая. Спасибо! –

+1

Вы также можете быть заинтересованы в 'match (x, mtcars $ a)' или 'intersect (x, mtcars $ a)' – GSee

ответ

1

Вы можете вставить $ в конце переменной, например:

grep.f <- function(x) { 
    b <- grep(paste0(x, '$'), mtcars$a) 
    print(mtcars[b, "a"]) 
} 
grep.f("Merc 450SL") 

И вместо печати, то лучше вернуть значения непосредственно:

grep.f <- function(x) { 
    grep(paste0(x, '$'), mtcars$a, value=T) 
} 
grep.f("Merc 450SL") 
Смежные вопросы