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

最近刚刚接触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所给出的数据结构如果做成动态的会相对比较复杂一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值