Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 从带有for循环的列表中获取元素_List_R_For Loop - Fatal编程技术网

List 从带有for循环的列表中获取元素

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] ""

我试图使用forloop从列表中提取值。这个列表包含77个我从网页上抓取的元素。它们被放入一个列表,strsplit与一个相当混乱的正则表达式匹配

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"