Clojure versus R: ventajas y desventajas para el análisis de datos

39

Tenía un plan para aprender R en el futuro cercano. Leyendo otra pregunta descubrí sobre Clojure. Ahora no sé qué hacer.

Creo que una gran ventaja de R para mí es que algunas personas en Economía lo usan, incluido uno de mis supervisores (aunque el otro dijo: ¡manténgase alejado de R!). Una ventaja de Clojure es que está basado en Lisp, y como he comenzado a aprender Emacs y estoy interesado en escribir mis propias personalizaciones, sería útil (sí, sé que Clojure y Elisp son diferentes dialectos de Lisp, pero son Lisp y por lo tanto similar me imagino).

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

Mi uso previsto : la mayor parte de mi estimación debe hacerse con Matlab, por lo que no busco nada demasiado profundo en términos de análisis estadístico, sino un software para sustituir Excel por la manipulación y visualización de datos iniciales, estadísticas resumidas y gráficos, pero también algunos análisis estadísticos básicos o los intentos iniciales de mi estimación.

Vivi
fuente
10
Si prueba R, es muy probable que renuncie a MATLAB (como en mi caso).
En mi opinión, esto debería ser wiki comunitario (las preguntas de tipo "versus" en lenguaje son bastante subjetivas).
Shane
Esta es definitivamente una pregunta sobre los lenguajes de programación y debe hacerse en Stack Overflow.
Sharpie
Estoy de acuerdo con Sharpie. @Vivi: debe cambiar el título de la pregunta para que sea "ventajas y desventajas para la mezcla de datos" o algo por el estilo para que sea más sobre el tema.
Shane
55
@Sharpie, @Shane IMO en este sentido es una cuestión de herramientas, por lo que es aceptable.

Respuestas:

27

Permítanme comenzar diciendo que me encantan los dos idiomas: tampoco puede equivocarse con ellos, y ciertamente son mejores que algo como C ++ o Java para hacer análisis de datos.

Para el análisis de datos básicos, sugeriría R (especialmente con plyr). En mi opinión, R es un poco más fácil de aprender que Clojure, aunque esto no es completamente obvio ya que Clojure se basa en Lisp y hay numerosos recursos fantásticos de Lisp disponibles (como SICP ). Hay menos palabras clave en Clojure, pero las bibliotecas son mucho más difíciles de instalar y trabajar. Además, tenga en cuenta que R (o S) se deriva en gran medida del Esquema, por lo que se beneficiaría del conocimiento de Lisp al usarlo.

En general:

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

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

Agregaría que di una charla sobre Clojure / Incanter con R hace un tiempo, por lo que puede resultarle interesante. En mi experiencia en la creación de esto, Clojure fue generalmente más lento que R para operaciones simples.

Shane
fuente
11

He sido un gran usuario 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 de todo corazón. Tiene una gran cantidad de paquetes que serían relevantes para usted para la econometría, series de tiempo, modelos de elección del consumidor, etc. y, por supuesto, excelente visualización, buen álgebra y bibliotecas numéricas, etc. No me preocuparía demasiado por las limitaciones de tamaño de los datos. Aunque R no fue diseñado para "big data" (a diferencia, por ejemplo, SAS), hay formas de evitarlo. La disponibilidad de paquetes es lo que realmente marca la diferencia.

Solo he leído las especificaciones de lenguaje de Clojure, y es hermoso y limpio. Aborda de manera natural los problemas de paralelización y escala. Y si tiene algún conocimiento básico de Java u OOP, puede beneficiarse de la gran cantidad de bibliotecas Java de alta calidad.

El problema que tengo con Clojure es que es una operación reciente de un solo hombre (R.Hickey), por lo tanto 1) muy arriesgado 2) muy inmaduro 3) con adopción de nicho. Ideal para entusiastas, primeros usuarios, personas de CS / ML que desean probar cosas nuevas. Para un usuario que ve un idioma como un medio para un fin y que necesita un código muy sólido que se pueda compartir con otros, los idiomas establecidos parecen una opción más segura. Solo sé quien eres.

alegre
fuente
+1 Gran respuesta. Tuve un debate similar hace un tiempo porque Incanter me intrigó (y he hecho algo de codificación Java). Estaba claro que R era el lenguaje a utilizar para realizar el trabajo estadístico rápidamente, mientras que Clojure era el lenguaje a usar para pensar más como un científico de la computación. Obviamente hay una superposición, pero como dices "saber quién eres".
Josh Hemann
SAS es tan antiguo que originalmente se ejecutaba en tarjetas perforadas, de ahí su sintaxis incómoda y arcaica. Parte de su "diseño de big data" es simplemente una tonta suerte que originalmente fue diseñado para ejecutarse en "mainframes" que tenían menos memoria que su teléfono y que usaban tarjetas perforadas para ingresar datos. No diría que está "diseñado" para Big Data, a pesar de que lo maneja bien.
Wayne
Tuve preocupaciones similares sobre Clojure en 2011 cuando lo escuché por primera vez. Ahora no, en 2014. Clojure y su comunidad son bastante maduros, y es sorprendentemente popular (después de todo, es un Lisp no funcional, no operativo). Sin embargo, no creo que Incanter alcance a R en cantidad de paquetes (por lo general, si puedes pensar en eso, ya está hecho). Hay una biblioteca Clojure Rincanter basada en la interfaz JRI Java-R, pero no estoy seguro de lo fácil que es usarla.
Marte
5

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

Aquí hay un punto de datos: R tiene un "techo de datos grandes" , útil para saber si planea 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 realmente peor. Me imagino que la JVM probablemente pueda manejar grandes conjuntos de datos, especialmente si logras aprovechar el poder de las características perezosas de Clojure.

Mike Mazur
fuente
1
R también es vago evaluado.
3
@mbq: tu comentario es engañoso. R evalúa perezosamente las variables en una definición de función, pero la "pereza" no es un comportamiento normal. La función delayedAssign () existe para decirle al intérprete que sea flojo con la asignación de una variable, pero el intérprete realizará la evaluación una vez que cualquier estructura de datos apunte a esa variable, ya sea que deba evaluarse o no. Además, la empresa comercial R Revolution Analytics tuvo que crear un objeto iterador para respaldar su comercialización para usar R en el análisis de "big data".
Josh Hemann
Creo que esta respuesta debería actualizarse. Desde R 3.0.0, R ya no tiene un límite de 2 ^ 31-1 elemento. 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 la memoria.
alegre