我认为R的数据预处理能力——即从数据源中提取数据和分析步骤之前的一切——在过去三年(我使用R的时间长度)中有了实质性的改进。我每天都在使用python,在过去的七年左右的时间里,它的文本处理能力非常出色,我仍然毫不犹豫地使用R来完成您提到的任务。
不过,还有一些附加条件。首先,我建议仔细查看Q中任务集的几个外部包,特别是hash(类似python的键值数据结构),以及stringr(主要由基本库中不太友好的字符串操作函数的包装器组成)
stringr和hash都可以在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个这样的非正式面向域的包集合之一)所证明的那样。在这个任务视图中是packagetm,一个专门用于文本挖掘的函数的包。tm中包含了用于处理任务(如Q中提到的任务)的优化功能
此外,R有一个很好的包选择,可以在相当大的数据集(例如,>;1 GB)上交互工作,通常不需要设置并行处理基础设施(但如果集群可用,它肯定可以利用集群)。在我看来,其中最令人印象深刻的是耶鲁大学的Michael Kane和John Emerson所著的一套“4}”(CRAN)软件包;这个项目包含了bigmemory、bigmanalytics、synchronicity、bigtabulate和biggalgebra。总之,这些包背后的技术包括:(i)将数据分配给共享内存,这使得能够通过单独的并发进程协调对数据的单个副本的共享访问;(ii)文件支持的数据结构(我相信,但我不确定,它是内存映射的文件结构的同义词,它的工作原理是使用指针实现从磁盘的快速访问,从而避免了对可用文件大小的RAM限制)。
尽管如此,R的标准库中有相当多的函数和数据结构使得交互处理接近普通RAM限制的数据更加容易。例如,.RData,一种本机二进制格式,使用起来尽可能简单(命令是save和load),并且它有很好的压缩:> 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倍的压缩。