Clojure versus R: vantagens e desvantagens da análise de dados


39

Eu tinha um plano de aprender R em um futuro próximo. Lendo outra pergunta , descobri o Clojure. Agora não sei o que fazer.

Eu acho que uma grande vantagem do R para mim é que algumas pessoas em Economia o usam, incluindo um dos meus supervisores (embora o outro tenha dito: fique longe do R!). Uma vantagem do Clojure é que ele é baseado em Lisp e, como eu comecei a aprender o Emacs e gosto de escrever minhas próprias personalizações, seria útil (sim, eu sei que Clojure e Elisp são dialetos diferentes do Lisp, mas são Lisp e, portanto, similar, eu imagino).

Não posso perguntar qual é o melhor, porque sei que isso é muito pessoal, mas alguém poderia me dar as vantagens (ou vantagens) do Clojure x R, especialmente em termos práticos? Por exemplo, qual deve ser mais fácil de aprender, qual é mais flexível ou mais poderoso, qual possui mais bibliotecas, mais suporte, mais usuários, etc.?

Meu uso pretendido : a maior parte da minha estimativa deve ser feita usando o Matlab, por isso não estou procurando nada muito profundo em termos de análise estatística, mas um software para substituir o Excel pela manipulação e visualização inicial de dados, estatísticas resumidas e gráficos, mas também algumas análises estatísticas básicas ou as tentativas iniciais de minha estimativa.


10
Se você quiser provar R, é altamente provável que você renuncie ao MATLAB (como no meu caso).

Na IMO, esse deve ser um wiki da comunidade (as perguntas do tipo "versus" são bastante subjetivas).
Shane

Esta é definitivamente uma pergunta sobre linguagens de programação e deve ser feita no Stack Overflow.
Sharpie

Eu concordo com a Sharpie. @ Vivi: você deve alterar o título da pergunta para que seja "vantagens e desvantagens da transferência de dados" ou algo nesse sentido, para que fique mais relacionado ao tópico.
Shane

5
@ Sharpe, @ Shane IMO, nessa medida, é uma pergunta sobre ferramentas, portanto é aceitável.

Respostas:


27

Deixe-me começar dizendo que eu amo as duas linguagens: você também não pode dar errado, e elas certamente são melhores do que algo como C ++ ou Java para fazer análise de dados.

Para análise básica de dados, sugiro R (especialmente com plyr). O IMO, R é um pouco mais fácil de aprender do que o Clojure, embora isso não seja completamente óbvio, pois o Clojure é baseado no Lisp e existem vários recursos fantásticos do Lisp disponíveis (como o SICP ). Existem menos palavras-chave no Clojure, mas as bibliotecas são muito mais difíceis de instalar e trabalhar. Além disso, lembre-se de que R (ou S) é amplamente derivado do esquema, portanto você se beneficiaria do conhecimento do Lisp ao usá-lo.

Em geral:

A principal vantagem do R é a comunidade no CRAN (mais de 2461 pacotes e contando). Nada se compara a isso em um futuro próximo, nem mesmo um aplicativo comercial como o matlab.

O Clojure tem a grande vantagem de executar na JVM, o que significa que ele pode usar qualquer biblioteca baseada em Java imediatamente.

Eu acrescentaria que dei uma palestra sobre Clojure / Incanter com R há um tempo atrás, para que você possa achar interessante. Na minha experiência em criar isso, o Clojure geralmente era mais lento que o R para operações simples.


11

Eu tenho sido um usuário pesado de R nos últimos 6-7 anos. Como linguagem, possui várias limitações de design. No entanto, para trabalhos em econometria e análise de dados, eu ainda o recomendo de todo o coração. Ele tem um grande número de pacotes que seriam relevantes para você em econometria, séries temporais, modelagem de escolha do consumidor etc. e, claro, excelente visualização, boa álgebra e bibliotecas numéricas etc. Eu não me preocuparia muito com as limitações de tamanho de dados. Embora o R não tenha sido projetado para "big data" (diferentemente, por exemplo, do SAS), existem maneiras de contornar isso. A disponibilidade de pacotes é o que realmente faz a diferença.

Eu só li as especificações de idioma do Clojure, e é bonito e limpo. Aborda de maneira natural questões de paralelização e escala. E se você tiver algum conhecimento básico sobre java ou OOP, poderá se beneficiar do grande número de bibliotecas java de alta qualidade.

O problema que tenho com o Clojure é que é uma operação recente de um homem (R.Hickey), portanto 1) muito arriscada 2) muito imatura 3) com adoção de nicho. Ótimo para entusiastas, adotantes precoces, pessoas de CS / ML que desejam experimentar coisas novas. Para um usuário que vê um idioma como um meio para um fim e que precisa de um código muito robusto que possa ser compartilhado com outros, os idiomas estabelecidos parecem uma opção mais segura. Apenas saiba quem você é.


+1 ótima resposta. Eu tive um debate semelhante há algum tempo, porque fiquei intrigado com o Incanter (e fiz alguma codificação Java). Ficou claro que R era a linguagem a ser usada para realizar rapidamente o trabalho estatístico, enquanto Clojure era a linguagem a ser usada para pensar mais como um cientista da computação. Obviamente, há sobreposição, mas como você diz "saiba quem você é".
Josh Hemann 21/10

O SAS é tão antigo que originalmente era executado em cartões perfurados, daí sua sintaxe estranha e arcaica. Uma parte de seu "design de big data" é simplesmente uma sorte idiota de que ele foi originalmente projetado para ser executado em "mainframes" que tinham menos memória que o telefone e que usavam cartões perfurados para inserir dados. Eu não diria que ele foi "projetado" para o Big Data, mesmo que ele lide bem com isso.
Wayne

Eu tinha preocupações semelhantes sobre o Clojure em 2011, quando ouvi falar dele pela primeira vez. Agora não, em 2014. Clojure e sua comunidade são bastante maduros e são surpreendentemente populares (afinal, é um Lisp não OO, funcional). No entanto, não acredito que o Incanter atinja R em número de pacotes (normalmente, se você puder pensar nisso, isso já foi feito). Existe uma biblioteca Clojure Rincanter baseada na interface JRI Java-R, mas não tenho certeza de como isso é fácil de usar.
Marte

5

Atualização (agosto de 2014): como @gappy comenta abaixo, a partir da versão 3.0.0 do R os limites são mais altos e significa que o R é capaz de lidar com conjuntos de dados maiores.

Aqui está um ponto de dados: R possui um "teto de big data" , útil para saber se você planeja trabalhar com grandes conjuntos de dados.

Não tenho certeza se as mesmas limitações se aplicam ao Clojure / Incanter, se ele supera o R ou é realmente pior. Imagino que a JVM provavelmente possa lidar com grandes conjuntos de dados, especialmente se você conseguir aproveitar o poder dos recursos preguiçosos do Clojure.


1
R também é avaliado preguiçosamente.

3
@mbq: Seu comentário é enganoso. R avalia preguiçosamente variáveis ​​em uma definição de função, mas "preguiça" não é um comportamento normal. A função delayedAssign () existe para dizer ao intérprete que seja preguiçoso com a atribuição de uma variável, mas o intérprete fará a avaliação assim que qualquer estrutura de dados apontar para essa variável, se ela precisa ser avaliada ou não. Além disso, a empresa comercial de Revolução Revolution Analytics teve que criar um objeto iterador para dar suporte ao seu marketing para usar R na análise de "big data".
Josh Hemann 21/10

Eu acho que essa resposta deve ser atualizada. Desde R 3.0.0, R não tem mais um limite de 2 ^ 31-1 elemento. O limite não é 2 ^ 63-1 (acredito) e 2 ^ 31-1 em cada dimensão de uma matriz. Isso o torna adequado para objetos grandes na memória.
gappy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.