我正在尝试使用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]])
任何人都可以建议如何获取每个列表元素所需的值。
答案 0 :(得分:4)
您应该将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)]
。这样效率更高!
答案 1 :(得分:2)
您可以将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"
答案 2 :(得分:-1)
我建议改用Perl。在执行你想做的操作(我假设)时,它会更方便。