grep не показывает все индексы, только [1] 1 - PullRequest
1 голос
/ 08 мая 2019

grep всегда выводит [1] 1, но не реальный индекс

a = "d123  d123 d123 asdf asd D123"
grep("d", a)
[1] 1

В переменной a есть несколько «d», но отображаются не все индексы.Я попытался http://rfunction.com/archives/1481, и это работает.

Почему простой не делает?

Это должно быть эквивалентно

unlist(gregexpr("d",a)[1])

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

РЕДАКТИРОВАТЬ : Из вашего связанного примера я предположил, что индекс ссылается на вектор. Но теперь, когда я запускаю второй пример кода в вашем вопросе, я вижу, что вы хотите index = position в строке. Так что @ Ронак-шах прав, а не я.

Я думаю, вы хотите:

a = c("d123",  "d123", "d123", "asdf", "asd", "D123")

, поскольку ваша текущая переменная a - это одна строка длиной = 1.

2 голосов
/ 08 мая 2019

От? grep

grep (value = FALSE) возвращает вектор индексов элементов x, которые дали совпадение

Например, см.

x <- c("abc", "ddddd", "ads", "ccc")

grep("d", x)
#[1] 2 3

Это означает, что x[2] и x[3] содержат d в них независимо от количества d s в них.

Поскольку вы хотите, чтобы позиция d s в строке grep была неправильным выбором, . Вы могли бы сделать

which(strsplit(a, "")[[1]]=="d")
#[1]  1  7 12 19 24

и с grep это будет

grep("d", strsplit(a, "")[[1]])
#[1]  1  7 12 19 24

, что даст вам эквивалент unlist(gregexpr("d",a)[1]).

Или используйте любой метод, указанный в этой ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...