List 从带有for循环的列表中获取元素
我试图使用forloop从列表中提取值。这个列表包含77个我从网页上抓取的元素。它们被放入一个列表,strsplit与一个相当混乱的正则表达式匹配List 从带有for循环的列表中获取元素,list,r,for-loop,List,R,For Loop,我试图使用forloop从列表中提取值。这个列表包含77个我从网页上抓取的元素。它们被放入一个列表,strsplit与一个相当混乱的正则表达式匹配 chunk <- strsplit(lines, "(<tr>|</td>)(<td>|<td[^>]+>)|aws| MB| KB") chunk块[76] [[1]] [1] ""
chunk <- strsplit(lines, "(<tr>|</td>)(<td>|<td[^>]+>)|aws| MB| KB")
chunk块[76]
[[1]]
[1] ""
[2] ""
[4] “蒙古”
[5] “mn”
[6] "1"
[7] "1"
[8] "21.95"
[9] ""
[10] “
”
我已尝试提取我需要的每个元素的部分:
for (i in length(chunk)) {
values <- chunk[[i]][c(4,6:8)]
}
用于(长度为i(块)){
值您应该替换值我建议改用Perl。它在执行您想要执行的操作(我假设)时更加方便。您可以使用lappy
和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"
chunk而不是regexpr,如果你解析HTML页面,使用例如XML包中的xpath可能是一个选项。@daroczig,谢谢。我会研究这个问题。谢谢Christian。我不确定我是否有时间学习Perl。我正在尝试与R一起学习Python,可能也没有时间学习Perl。为什么投票被否决?我一年来也面临同样的问题以前,我开始使用Perl,这使我能够做更多的事情。@John I现在,继续学习新语言是很耗时的。但是,对于上面的任务,你会发现Perl是一个宠儿。编码快乐!ChristianI没有投反对票,但我怀疑这是因为它没有回答问题或提供可行的解决方案。@Christian:part也是说你的说法根本不正确。我确实知道并使用perl,但你显然低估了R的威力。perl在处理向量和矩阵时有一些严重的缺点,即使在谈论字符串工作时也是如此。漂亮,它应该读取值,你应该完全去掉for循环。我明白你的意思Joris/Joshua。as.data。frame(do.call(rbind,lappy(chunk,
[,c(4,6:8)))
在不使用forloop的情况下提供所需的输出。谢谢
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"