Получить элементы из списка с помощью цикла for - PullRequest
2 голосов
/ 25 марта 2011

Я пытаюсь извлечь значения из списка, используя forloop.Список содержит 77 элементов, которые я удалил с веб-страницы.Они были помещены в список с strsplit, сопоставленным с довольно грязным регулярным выражением.

chunk <- strsplit(lines, "(<tr>|</td>)(<td>|<td[^>]+>)|aws| MB| KB")

Пример элемента выглядит так:

> chunk[76]
[[1]]
 [1] ""                                                                                     
 [2] "<img src=\"/images/"                                                                  
 [3] "tats/flags/mn.png\" height=\"14\" alt='mn' title='mn' />"                             
 [4] "Mongolia"                                                                             
 [5] "mn"                                                                                   
 [6] "1"                                                                                    
 [7] "1"                                                                                    
 [8] "21.95"                                                                                
 [9] ""                                                                                     
[10] "<img src=\"/images/"                                                                  
[11] "tats/other/hp.png\" width=\"2\" height=\"5\" alt='Pages: 1' title='Pages: 1' /><br />"

Я попытался извлечь части каждого элементачто мне нужно с:

for (i in length(chunk)) {  
    values <- chunk[[i]][c(4,6:8)]
}

Результатом, возвращаемым для значений, всегда являются извлеченные части последнего элемента списка (chunk[[77]])

Может кто-нибудь подсказать, как получить нужные мне значения для каждогоэлемент списка.

Ответы [ 3 ]

4 голосов
/ 25 марта 2011

Вы должны заменить values <- chunk[[i]][c(4,6:8)] на values <- rbind(values,chunk[[i]][c(4,6:8)]) (инициализировать values <- NULL перед циклом).

Или вы можете создать матрицу перед циклом values <- matrix(0,length(chunk),4) и в цикле использовать values[i,] <- chunk[[i]][c(4,6:8)].Это более эффективно!

2 голосов
/ 25 марта 2011

Вы можете использовать lapply с do.call(rbind, ...) вместо цикла for.

chunk <- list(
  c("", "<img src=\"/images/",
  "tats/flags/mn.png\" height=\"14\" alt='mn' title='mn' />",
  "Mongolia", "mn", "1", "1", "21.95", "", "<img src=\"/images/",
  "tats/other/hp.png\" width=\"2\" height=\"5\" alt='Pages: 1' title='Pages: 1' /><br />"),
  c("", "<img src=\"/images/",
  "tats/flags/mn.png\" height=\"14\" alt='mn' title='mn' />",
  "Mongolia", "mn", "1", "1", "21.95", "", "<img src=\"/images/",
  "tats/other/hp.png\" width=\"2\" height=\"5\" alt='Pages: 1' title='Pages: 1' /><br />") )
do.call(rbind, lapply(chunk, `[`, c(4,6:8)))
#      [,1]       [,2] [,3] [,4]   
# [1,] "Mongolia" "1"  "1"  "21.95"
# [2,] "Mongolia" "1"  "1"  "21.95"
0 голосов
/ 25 марта 2011

Я бы посоветовал вместо этого использовать Perl. Это гораздо удобнее при выполнении операций (я полагаю), которые вы хотели бы сделать.

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