Есть ли какая-либо функция в любом пакете, который может читать текстовый файл с регулярным выражением и возвращать номера строк найденных совпадений. Как gsubfn read.pattern может найти и извлечь шаблон, но не может вернуть номер строки, и grep не может читать файлы напрямую. Пример:R: альтернатива grep для файла без использования readLines?
файл:
.122448110000D+06 .400000000000D+01
3 15 3 23 10 0 0.0 .267305411398D-03 .161435309564D-10 .000000000000D+01
.510000000000D+02 .625000000000D-01 .440982654411D-08 .306376855997D+00
5 15 3 23 11 59 44.0 -.263226218521D-03 .488853402202D-11 .000000000000D+01
картина: reg="^ *\\d+ +(?:[0-9]+ +){5}[.0-9]+.*$"
для 2-й и 4-й матч линии. Так что я вообще хочу:
>file.grep(file,reg)
[1] 2 4
Есть ли что-нибудь в этом роде? Я получаю общую философию, когда занимаюсь такими вещами: readLines
, а затем создаю творческий подход с grep
, который хорош, если файлы не такие большие. Но я читал здесь, что у многих людей проблемы с большими, а не табличными структурами данных, вещи, которые могут быть решены с помощью такого инструмента (или с readLines
, поддерживающим параметр regex skip
), и мне интересно, сделал ли кто-нибудь подобное.
Очень аккуратный трюк, но, к сожалению, нет. Дело в том, что мне нужны строковые номера, чтобы извлекать вещи между ними не самими строками. Я хочу получить блок между двумя определенными линиями соответствия (например, ниже 2-го и до 4-го). Это будет работать, если read.pattern не читал строку за раз, тогда я мог бы походить с регулярным выражением и извлекать данные между совпадениями, но он делает это, и поэтому я не могу. – ephemeris
Этот другой вопрос не будет работать: строки соответствия содержат дополнительные данные о блоках между ними, я не могу просто спеть все блоки вместе - у них может быть разное количество строк в них - указано в соответствующих строках. – ephemeris