2014-01-21 3 views
0

Я пытаюсь прочитать случайный текстовый файл по одной строке за раз. Затем разделите строку на «слова» и произведите некоторое регулярное выражение для каждого слова, например, найдите все слова, начинающиеся с «w». После того, как следующий фрагмент кода я получаю:R, readLines, strsplit и grep

while (length(oneLine <- readLines(infile, n = 1, warn = FALSE)) > 0) { 
    myVector <- (strsplit(oneLine, " ", fixed = FALSE, perl = TRUE)) 
    res <- grep("^w", myVector, perl = TRUE, value = TRUE) 
    ... 

> myVector 
[[1]] 
[1] "u"   "rtu"   "jgiyu"  "t6riuri-4e5-" "ee4"   "59"   
[7] "43" 

Мой вопрос, что такое правильный синтаксис для доступа к «U», «РТУ», ...?

> myVector[1] 
[[1]] 
[1] "u"   "rtu"   "jgiyu"  "t6riuri-4e5-" "ee4"   "59"   
[7] "43" 

Не работает. Что будет? Что случилось с [[1]]? У меня создалось впечатление, что векторы одномерны, и к ним обращаются такие элементы, как myVector [1], myVector [2] и т. Д. Спасибо за помощь.

ответ

0

strsplit возвращает список. В этом случае это список длины 1, но если вы использовали readLines для всего файла, то он вызвал strsplit, он вернул бы список той же длины, что и количество строк.

Для того, как вы его используете, вам нужно выбрать первый элемент первого компонента списка. то есть myVector[[1]][1] для «u» и myVector[[1]][2] для «rtu». Кроме того, в этом случае будут работать unlist(myVector)[1] и unlist(myVector)[2].

+1

Это выполняет свою работу. – user2970161

Смежные вопросы