作者Wush978 (拒看低质媒体)
看板R_Language
标题Re: [讨论] R语言与其他语言
时间Fri Apr 22 13:58:17 2016
※ 引述《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,以降低未来的
维护困难度。
以上是我个人整合系统的经验,给你参考
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.175.236.223
: ※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1461040268.A.059.html
: 推 memphis: 如果你指的"实务" 是指用别人的东西的话..当然资源在哪 04/19 12:38
: → memphis: 就去学那个语言, 学到可以装package 小改参数之类的就可 04/19 12:40
: 推 psinqoo: 功力问题 04/19 13:37
: 推 JackBaska: 语言能作的事情只要不是本身已不支援,如试图用纯应用端 04/22 11:59
: → JackBaska: 的语言控制硬体,不然所有事情都可以做出一样的东西只是 04/22 12:00
: → JackBaska: 修炼难度不同的问题,像是有些资料处理C++可能要练到 04/22 12:01
: → JackBaska: 90分才能做R语言30分的事情,就像强化系练具现话系的 04/22 12:01
: → JackBaska: 能力 04/22 12:01
: 推 JackBaska: 以此概念出发,先弄清楚你主要要解的问题最常碰到什麽 04/22 12:05
: → JackBaska: 然後选对应修炼难度最低的语言去学,可以省很多心力 04/22 12:06
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.234.173
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1461304699.A.D24.html
※ 编辑: Wush978 (1.161.234.173), 04/22/2016 13:59:26
1F:推 memphis: wow 好有诚意的一篇 04/22 15:57
2F:推 bowin: 推 Wush 这篇! 04/22 18:52
3F:→ HeroNoah: 受用, 推! 04/22 20:08
4F:推 cywhale: great to learn.. thanks sharing~ 04/22 21:15
5F:推 ehome: 大推~超详尽分析 04/23 21:39
6F:推 JackBaska: 语言的可能性果然是由使用者功力决定 04/23 21:58
7F:推 Neisseria: 推这篇文章 04/23 21:58