※ 引述《clansoda (小笨)》之铭言:
: 标题: [讨论] R语言与其他语言
: 时间: Tue Apr 19 12:31:03 2016
:
: 不知道这样的讨论能不能PO在板上,若不行请告知我立刻删除
:
: 刚学资料分析的时候是用SAS,但是考量到SAS只有大公司的授权版本
:
: 我认为说可能很多公司用不了,因此寻找替代方案
:
: 这时候R出现在我面前,既开源又有许多的PACKAGE来使用很符合需求
:
: 因此开始使用R语言来做分析,就我来说R是一个把资料丢进去跑分析
:
: 然后可将结果视觉化的工具软件,确实相当优秀,可是得出结论
:
: 但是如果要应用的话感觉有些不足,像是我先前一段时间再研究arules package
:
: 所使用的association rule 和collaborative filtering 这样的推荐系统
:
: 确实可以跑出结果,例如A可能会像B一样想买C产品,这样的一条结果
:
: 但是结果怎么实用呢,感觉还需要其他辅助才能做出真的像是amazon或pchome那样
:
: 使用者真的能立刻被推荐的系统,我查了一下发现apache的开源专案mahout跟hadoop
:
: 我之前有上过hadoop的课程,不过听不太懂,而mahout是一个可以应用推荐系统的开源
:
: 专案,网络上是说用java去写,因此我是不是就去学java呢?
:
: 也想知道板友除了R之外是不是都有另外的语言专长像是C或JAVA这样的语言
:
: 也深深感到自己的不足,有板友可以推荐其他可以和R或者实务连结的语言吗?
:
实务上,你可以透过作业系统来串连不同的工具
透过Rscript 执行档,R 可以包成命令列应用程序,让所有能呼叫system call的
语言使用,例如:C, java, python, php, nodejs, ... 族繁不及备载
hadoop streaming也是用类似的概念来串接其他的工具,让你可以用Hadoop cluster
来跑R, python, ...
如果你相关经验不足(例如这篇文章中用的名词没办法全部看懂),我强烈建议你先
去学这个解决方案,会省很多时间。
如果要更直接的连结,一种方式是把R 或其他工具整合到相同的Process中,只要掌握
得当,这种方法可以有更好的效能。但是掌握不得当,就是拿石头砸自己的脚。
基本上,R 可以跟任何C based的工具有深入的连结,例如:C, C++, python,
php,以python为例,可以看看我投Rcpp Gallery的:
http://gallery.rcpp.org/articles/rcpp-python/
如果是要嵌入R 的话,有RInside专案。
现成解决方案的话,要看工具。Python的话,有rPython套件,nodejs的话有V8
(但是少很多东西,所以我不推荐)
我是觉得,如果你只是自己用,可以玩一玩。如果要做成服务,最好搞懂我上面那篇文章
中的技术,因为稳定性是系统最重要的事情之一,用rPython这种套件,你很难确认它有没
有埋地雷到你的系统里面。
R 和Java的话,有rJava套件,但是我的经验是除了Linux based的系统外,可能光Hello
World 就要搞很多系统设定,这是因为R 是C 写的,所以和C 写的其他工具整合比较容
易,而Java就要透过jni... 我不会说做不到,但是脆弱更多。rJava 帮你搞定很多问题
但是也可能导入其他地雷。
ps. 脆弱的意思是,容易出错的地方更多,所以用起来更不稳定,新手要尝试也更容易失
败
Scala, Spark 也都是走rJava,所以如果你真的想玩的话,去弄Linux 作业系统来试吧,
会省下你很多的时间的。Mac 上的rJava我自己都搞不定,Windows的话有一些额外的设定
动作要跑。Ubuntu的话,只要照着说明跑一两行程式码就可以开始玩你的目标了。
以上是方向,以下是我个人经验
我有写一个小专案来透过python做资料前处理后汇入R 。跑了一两年都没问题,因为我
100%掌握了里面所有关键。(我知道不会有内存泄漏,因为我自己看到内存怎么管)
但是最终,我还是把程式拆解成python先处理,写入硬盘,R再读出来的架构,因为...
用python,我才能找工程师来帮忙。
我在R中进行模型学习后,最后把模型写到database。在nodejs中,再连到database中
读取模型,并且在nodejs中实作算法。虽然这样简单,但是后续维护会有两倍成本:
R 在模型学习中产生feature的动作,要100%和nodejs中产生feature的动作一致。
这会让后续的维护成本变成两倍以上(除了要改两套之外,还要确保一致性)
现在我正在尝试用nodejs直接把所有产生feature的动作做完后才交给R,以降低未来的
维护困难度。
以上是我个人整合系统的经验,给你参考
: