41 votos

Clojure frente a R: ventajas e inconvenientes para el análisis de datos

Tenía pensado aprender R en un futuro próximo. Leer otra pregunta Descubrí Clojure. Ahora no sé qué hacer.

Creo que un gran ventaja de R para mí es que algunas personas en Economía lo utilizan, incluido uno de mis supervisores (aunque el otro me dijo: ¡aléjate de R!). Un ventajas de Clojure es que está basado en Lisp, y como he empezado a aprender Emacs y tengo ganas de escribir mis propias personalizaciones, sería útil (sí, ya sé que Clojure y Elisp son dialectos diferentes de Lisp, pero ambos son Lisp y por lo tanto similares, me imagino).

No puedo preguntar cuál es mejor, porque sé que esto es muy personal, pero ¿podría alguien darme las ventajas (o ventajas) de Clojure x R, especialmente en términos prácticos? Por ejemplo, ¿cuál debe ser más fácil de aprender, cuál es más flexible o más potente, cuál tiene más librerías, más soporte, más usuarios, etc?

Mi uso previsto : La mayor parte de mi estimación debe hacerse usando Matlab, así que no estoy buscando nada demasiado profundo en términos de análisis estadístico, sino más bien un software para sustituir a Excel para la manipulación inicial de datos y visualización, estadísticas de resumen y gráficos, pero también algunos análisis estadísticos básicos o los intentos iniciales de mi estimación.

11 votos

Si probaras R, es muy probable que renunciaras a MATLAB (como en mi caso).

0 votos

En mi opinión, esto debería ser una wiki comunitaria (las preguntas del tipo "versus" son bastante subjetivas).

0 votos

Esta es sin duda una pregunta relacionada con los lenguajes de programación y debería hacerse en Stack Overflow.

29voto

Jon Galloway Puntos 28243

Permítanme empezar diciendo que me encantan ambos lenguajes: no te puedes equivocar con ninguno, y sin duda son mejores que algo como C++ o Java para hacer análisis de datos.

Para el análisis básico de datos sugeriría R (especialmente con plyr). IMO, R es un poco más fácil de aprender que Clojure, aunque esto no es completamente obvio ya que Clojure está basado en Lisp y hay numerosos recursos fantásticos de Lisp disponibles (tales como SICP ). Hay menos palabras clave en Clojure, pero las bibliotecas son mucho más difíciles de instalar y trabajar con ellas. Además, ten en cuenta que R (o S) deriva en gran medida de Scheme, por lo que te beneficiarías de conocimientos de Lisp al utilizarlo.

En general:

La principal ventaja de R es la comunidad en CRAN (más de 2461 paquetes y subiendo). Nada se podrá comparar con esto en un futuro próximo, ni siquiera una aplicación comercial como matlab.

Clojure tiene la gran ventaja de ejecutarse en la JVM, lo que significa que puede utilizar inmediatamente cualquier biblioteca basada en Java.

Me gustaría añadir que di una charla sobre Clojure/Incanter y R hace un tiempo, así que puede que te resulte interesante. En mi experiencia creando esto, Clojure era generalmente más lento que R para operaciones simples.

13voto

Grant Puntos 5366

He sido un usuario intensivo de R durante los últimos 6-7 años. Como lenguaje, tiene varias limitaciones de diseño. Sin embargo, para trabajar en econometría y en análisis de datos, lo recomiendo sin reservas. Dispone de un gran número de paquetes relevantes para la econometría, las series temporales, la modelización de la elección del consumidor, etc. y, por supuesto, una excelente visualización, buenas bibliotecas algebraicas y numéricas, etc. Yo no me preocuparía demasiado por las limitaciones de tamaño de los datos. Aunque R no se diseñó para "big data" (a diferencia de, por ejemplo, SAS), hay formas de evitarlo. La disponibilidad de paquetes es lo que realmente marca la diferencia.

Sólo he leído las especificaciones del lenguaje Clojure, y es bonito y limpio. Aborda de forma natural cuestiones de paralelización y escala. Y si tienes algunos conocimientos básicos de java u OOP, puedes beneficiarte del gran número de librerías java de alta calidad.

El problema que tengo con Clojure es que es una operación reciente de una sola persona (R.Hickey), por lo tanto 1) muy arriesgado 2) muy inmaduro 3) con adopción de nicho. Genial para entusiastas, early adopters, gente de CS/ML que quiere probar cosas nuevas. Para un usuario que ve un lenguaje como un medio para alcanzar un fin y que necesita un código muy robusto que pueda compartirse con otros, los lenguajes establecidos parecen una opción más segura. Sólo tienes que saber quién eres.

0 votos

+1 Gran respuesta. Tuve un debate similar hace un tiempo porque estaba intrigado por Incanter (y he hecho algo de codificación Java). Estaba claro que R era el lenguaje que había que usar para hacer trabajo estadístico rápidamente mientras que Clojure era el lenguaje que había que usar para pensar más como un informático. Obviamente hay solapamientos, pero como tú dices "conoce quién eres".

1 votos

SAS es tan antiguo que originalmente funcionaba con tarjetas perforadas, de ahí su sintaxis torpe y arcaica. Parte de su "diseño para grandes volúmenes de datos" se debe simplemente a la tonta suerte de que se diseñara originalmente para ejecutarse en "mainframes" que tenían menos memoria que tu teléfono y que utilizaban tarjetas perforadas para introducir los datos. Yo no diría que está "diseñado" para Big Data, aunque lo maneja bien.

0 votos

Tenía preocupaciones similares sobre Clojure en 2011 cuando oí hablar de él por primera vez. No las tengo ahora, en 2014. Clojure y su comunidad son bastante maduros, y es sorprendentemente popular (después de todo, es un Lisp no OOO, funcional). Sin embargo, no creo que Clojure llegue a alcanzar a R en número de paquetes (normalmente, si se te ocurre, ya se ha hecho). Hay una biblioteca Clojure Rincanter basada en la interfaz JRI Java-R, pero no estoy seguro de lo fácil que es de usar.

5voto

dagorym Puntos 2025

Actualización (agosto de 2014): como comenta @gappy más abajo, a partir de la versión 3.0.0 de R los límites son mayores y significa que R es capaz de manejar conjuntos de datos más grandes.

He aquí un dato: R tiene un "techo de big data" útil si piensas trabajar con grandes conjuntos de datos.

No estoy seguro de si las mismas limitaciones se aplican a Clojure/Incanter, si supera a R o es en realidad peor. Imagino que la JVM probablemente pueda manejar grandes conjuntos de datos, especialmente si consigues aprovechar la potencia de las características perezosas de Clojure.

1 votos

R también se evalúa con pereza.

3 votos

@mbq: Tu comentario es engañoso. R evalúa perezosamente las variables en la definición de una función, pero la "pereza" no es un comportamiento normal. La función delayedAssign() existe para decirle al intérprete que sea perezoso con la asignación de una variable, pero el intérprete hará la evaluación una vez que cualquier estructura de datos apunte a esa variable, necesite ser evaluada o no. Además, la empresa comercial de R Revolution Analytics tuvo que crear un objeto iterador para apoyar su marketing para el uso de R en el análisis de "big data".

0 votos

Creo que esta respuesta debería actualizarse. Desde R 3.0.0, R hace no ya no tienen un límite de 2^31-1 elementos. El límite no es 2^63-1 (creo) y 2^31-1 en cada dimensión de una matriz. Esto lo hace adecuado para objetos grandes en memoria.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X