您的位置:首页 > 理论基础 > 数据结构算法

R语言-数据结构之初体验(parse html)

2016-08-21 22:00 253 查看
最近刚刚接触R语言,之前知道一些R语言的一些基本知识,这几天开始进行一些练习。

题目:从Download Stats for Bioconductor

Software Packages(http://bioconductor.org/packages/stats/index.html)中parse出所有的package以及download次数,要求返回为一个numeric vector,download times 为vector中的值,而对应的package储存在这个vector的name属性中,而且保证没有重复的package name.

我所采取的是利用readLines返回一个charactor vector 之后利用regular expression 提取出所需要的信息。在这里会遇到两个问题:

1、regular expression 的写法, regular expression应该遵循的是准确简介,在匹配html文件的时候最好能够加入><的匹配,这样不会混入一些无用信息。

2、如何去除没有匹配到的行,我采取的是subset,这样就导致了一个很麻烦的问题,就是我在同一个问题中采用了两次正则匹配,这样增加了运算时间。因为第一次正则匹配用来去除无用的行,第二次正则匹配用来提取出 package names 和 download times。

我之所以考虑这种办法的原因是我被答案要求的numeric vector限制住了,我想的是第一次返回就是vector。

而我参考的一个非常简单的做法是,

在readLines读出html文件后就把其paste成一个string,然后利用gregexpr进行一次正则匹配可以得出所有匹配上的位置以及长度,再利用substring一次提取出所有的的匹配上的字符返回是就是一个vector. gregexpr可以分组匹配的特点特别好用,这样就可以很方便的知道我们需要信息的起点和长度。

其实R的特点在于它的很多built-in functions都可以返回vector甚至是matrix所以当看到需要返回值是vector时不必那么慌张,反而R中很多数据结构都没有删除这个操作,vector 和 matrix中的删除操作就是提取出需要的行数. 以我现在的体会,在R所给出的数据结构如果做成动态的会相对比较复杂一点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  r语言