Creo que la capacidad de procesamiento previo de datos de R, es decir, todo, desde extraer datos de su fuente y justo antes de los pasos de análisis, ha mejorado sustancialmente en los últimos tres años (el tiempo que he estado usando R). Utilizo Python a diario y durante los últimos siete años aproximadamente (sus capacidades de procesamiento de texto son excelentes) y aún así no dudaría ni un momento en usar R para el tipo de tarea que mencionas.
Un par de condiciones, sin embargo.En primer lugar, sugeriría mirando muy de cerca en un par de los externos paquetes para el conjunto de tareas en su Q - en particular, de hash (python-como estructura de datos clave-valor), y stringr (compuesta principalmente por envolturas más de las funciones menos fáciles de usar de manipulación de cadenas en la base de la biblioteca)
Tanto stringr y de hash están disponibles en 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
<hash> containing 5 key-value pair(s).
a : 1
b : 2
c : 3
d : 4
e : 5
> dx[a]
<hash> 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"
Parece también que existe un gran subconjunto de los usuarios de I para los cuales el procesamiento de textos y análisis de texto comprenden una porción significativa de su trabajo del día a día - como se evidencia por CRAN de Natural Language Processing Task View (uno de aproximadamente 20 tales colecciones de paquetes informales orientadas al dominio). Dentro de esa Vista de tareas se encuentra el paquete tm, un paquete dedicado a funciones para minería de textos. Incluido en tm son funciones para tareas de procesamiento optimizado tal como la mencionada en su Q.
Además, R tiene una excelente selección de paquetes para trabajar de forma interactiva en razonablemente grandes conjuntos de datos (por ejemplo,> 1 GB) a menudo sin la necesidad de configurar una infraestructura de procesamiento paralelo (pero que sin duda puede explotar un clúster si está disponible). Los más impresionantes de estos en mi opinión son el conjunto de paquetes bajo la rúbrica "The Bigmemory Project" (CRAN) de Michael Kane y John Emerson en Yale; este proyecto incluye bigmemory, biganalytics, synchronicity, bigtabulate y bigalgebra. En resumen, las técnicas detrás de estos paquetes incluyen: (i) asignar los datos a la memoria compartida, lo que permite la coordinación del acceso compartido por procesos simultáneos separados a una única copia de los datos; (ii) estructuras de datos respaldadas por archivos (que creo, pero no estoy seguro, es sinónimo de una estructura de archivos mapeada en memoria, y que funciona permitiendo un acceso muy rápido desde el disco usando punteros, evitando así el límite de RAM en el tamaño de archivo disponible) .
Aún así, bastantes funciones y estructuras de datos en la biblioteca estándar de R hacen que sea más fácil trabajar de forma interactiva con datos que se aproximan a los límites de RAM normales. Por ejemplo, .RData, un formato binario nativo, es casi tan simple como sea posible usar (los comandos son Guardar y de carga) y tiene una excelente compresión:
> 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')
Este archivo, 'prueba. RData 'es solo 176 KB, mayor que 10 veces compresión.
No es una respuesta directa a su pregunta, pero ¿tiene conocimiento de cosas como rpy2? Le permite convertir objetos Python en objetos R y usar funciones R en ellos. Entonces puede hacer el procesamiento de Python, luego el procesamiento R en el mismo script, aunque con una sintaxis un poco más larga. –
@Thomas No es una solución. Mi preocupación es que quiero seguir con R y usar menos cosas externas como sea posible. Especialmente cuando doy mi código, sería mejor si el usuario final solo necesita instalar R. –
los conjuntos están disponibles en el paquete 'sets'. Dado que los vectores tienen elementos nombrados, se comportan de manera muy similar a los dictados para la mayoría de los propósitos. (Un data.frame con id y columnas de valores también funciona como dict.) –