我认为,R的数据预处理能力 – 即从提取数据源和分析步骤之前的所有数据 – 在过去三年(我一直在使用R的时间长度)方面有了显着的改善.我每天都在使用python,并且在过去的七年左右,它的文本处理能力是非常棒的,而且我仍然会毫不犹豫地使用R作为你提到的任务类型.
一些条件虽然.首先,我建议非常仔细地查看几个外部程序包,用于您的Q中的一组任务,特别是哈希(类似python的键值数据结构)和stringr(主要由较少的包装器组成)基础库中用户友好的字符串操作功能)
字符串和哈希都可以在CRAN上使用.
> library(hash)
> dx = hash(k1=453, k2=67, k3=913)
> dx$k1
[1] 453
> dx = hash(keys=letters[1:5], values=1:5)
> dx
containing 5 key-value pair(s).
a : 1
b : 2
c : 3
d : 4
e : 5
> dx[a]
containing 1 key-value pair(s).
a : 1
> library(stringr)
> astring = 'onetwothree456seveneight'
> ptn = '[0-9]{3,}'
> a = str_extract_all(astring, ptn)
> a
[[1]]
[2] "456"
似乎还有一大部分R用户,其文本处理和文本分析占其日常工作的很大一部分 – CRAN的Natural Language Processing Task View(大约20个非正式的面向领域的软件包集合之一).该任务视图是包tm,一个专用于文本挖掘功能的包.包含在tm中的是优化的功能,用于处理任务,如Q中提到的任务.
此外,R具有极佳的包装选择,可以在相当大的数据集(例如> 1 GB)上进行交互式工作,而不需要设置并行处理基础设施(但是如果可用,则可以肯定利用集群).我认为最令人印象深刻的是由迈克尔·凯恩(Michael Kane)和耶鲁大学的约翰·艾默生(John Emerson)所着的“The Bigmemory Project”(CRAN)下的套装.这个项目包括大记忆,大分析,同步,大笨重和bigalgebra.总而言之,这些软件包的技术包括:(i)将数据分配给共享内存,这使得能够通过单独的并发进程将共享访问协调到数据的单个副本; (ii)文件支持的数据结构(我相信,但我并不确定这是内存映射文件结构的同义词,并且使用指针可以实现从磁盘的快速访问,从而避免了对可用文件大小的RAM限制) .
然而,R标准库中的很多功能和数据结构使得更容易与接近普通RAM限制的数据进行交互式工作.例如,.RData,一种本机二进制格式,尽可能简单(命令是保存和加载),它具有很好的压缩性:
> library(ElemStatLearn)
> data(spam)
> format(object.size(spam), big.mark=',')
[1] "2,344,384" # a 2.34 MB data file
> save(spam, file='test.RData')
这个文件’test.RData’只有176 KB,大于10倍的压缩.