R编程感悟
虽然大学阶段曾经学过C++, matlab等编程,但是真的几乎完全还给了老师~
所以,我一直将R 作为自己真正学习的第一门语言。我从2012年初在来美国的第二个rotation中开始接触到了R。当时不要说编程,就是对计算机都是了解极少。买计算机的时候开始把计算机的配置什么都了解,后来又自己买内存升级自己的小本。再后来计算机出了点问题,拆开机箱,也曾拆开笔记本。扯远了~~~~~
其实现在想想当时对计算机真的就是很白痴的。第一个rotation过完以后,算是对R入门了。于是开始写更多的代码。哪个时候写个一百多行的脚本便觉得不得了了~~~~ 其实现在看来,当时那些脚本就是把一行一行的命令堆起来,实在不能称为编程!其实包括我实验室中以前做我这块东西的姐姐,甚至那些做生统的老师,他们写的代码也都是结构性很差的,只能称之为代码,而不是编程。这恐怕是生物统计和生物信息的一大区别拉!
回过头来看这两年写的代码,确实实在不断进步当中:最开始就是不断地堆代码,狂用for循环,只能算是写代码,不能算编程;后来发现函数挺好用的,于是会写一些小的函数,开始用apply;再后来开始写大函数,就是将那些代码用一个大函数罩起来~ 这个缺点就是不好debug,另外代码太大,一个函数几百行,不好完善。
现在开始将这些代码函数化,block化~ 这真的有很大的优势:
1. 写代码的时候更有系统性:现在写代码不是以前那样想哪儿写哪儿,而是像写作文一样,先列一个提纲:需要几个函数,各个函数的 input 和 output 都是什么; 怎样安排主函数的结构:哪里用循环,哪些函数放在循环里面,哪些放外面;接下来的就是把各个函数给填满。
2. 快速:我本以为这样写代码会很慢,但是自己却惊奇地发现自己在状态并不太好的情况下能够在两个小时内完成一项任务。而且,这些代码以后可以作为“block”随意添加到其他代码中,将会更加加快编程速度。
3.debug:以前用R 的时候很少用debug这个函数。知道最近才终于开始用,也终于发现了其重要性!而且模块化的代码真的是更好来查错!
另外,还有一点非常重要的是:使用项目,以及相对目录进行R的数据操作!
这一点真的非常重要:R是数据操作语言,经常会调用各种不同的数据。然而一旦我将某个数据文件变换位置,或者变换文件夹目录结构,原来的脚本便无法再次奏效,必须把数据文件的路径修改才行。因此,使用Rstudio的project选项,在其创建的目录里面添加一些诸如data,output,plots等的目录,采用相对目录的写法进行代码的编写。你会发现,即使变换目录,甚至可能到了其他电脑上面,这个project依旧work!所以,以后尽量以项目的方式进行管理,并且多采用相对目录的写法进行编程!
总之,最近感到在编程上面有所感悟,记录一下。当然,与高手比还差得很远,继续加油!
R编程感悟的更多相关文章
- Python编程感悟
从今年起开始学习python,最开始是听得MIT的那门公开课,然后又看了一本入门的书籍.但是总是没有觉得python很好用.可能的原因现在想起来是:IDE始终找不到顺手的,另外R用得太舒服了- any ...
- 编程感悟-建立好代码sop
1.最近学django和python,发现很多的函数记不住,这时候我百度了一下,发现记不住是程序员的正常情况, 这下心安理得多了,记好笔记和咱的sop吧,会很快. 社会是不是也这样,好多东西也记不住, ...
- java编程感悟01
很多职位都要求有极强的编程能力,在学习编程的过程中可能很累,可能想有新认识,你可以将编程看做通关模式,以此鼓励自己不断的学习. jsp中注册时的验证码就需要javaSE的编程功底,如果这个会了,验证码 ...
- Python调用R编程——rpy2
在Python调用R,最常见的方式是使用rpy2模块. 简介 模块 The package is made of several sub-packages or modules: rpy2.rinte ...
- java编程感悟02
很多时候我们需要网上查阅他人的代码,如果代码比较长或者注释较少,阅读起来就会比较费劲,这时需要培养快速读懂应用他人的代码的能力. 实现图片的旋转功能: import java.awt.geom.Aff ...
- Go 协程编程感悟
0.GPM模型 1.默认地, Go所有的goroutines只能在一个线程里跑 ,除非告诉Go我们允许同时最多使用多个核,或者主动让出CPU时间,使goroutine可以抢占式的执行 2.如果当前go ...
- Android传感器编程带实例
看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推荐大家也看看.话不多说,还是言归正传吧. 一.前言 我很喜欢电脑,可是笔记本还是太大,笔记本电脑再小还是要 ...
- 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你
方法(一)编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和梁 ...
- Android传感器编程带实例(转)
源:http://www.cnblogs.com/xiaochao1234/p/3894751.html 看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推 ...
随机推荐
- js获取浏览器的版本代码
<script>function GetXmlHttpObject(){var xmlHttp=null;var httptype='';try { // Firefox, Opera 8 ...
- 类似UC天气下拉和微信下拉眼睛头部弹入淡出UI交互效果(开源项目)。
Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout 原作者项目意图实现 ...
- javascrip自定义对象的方式
对象初始化方式(也叫json对象创建方式) <script type="text/javascript"> var User = { name:"paul&q ...
- Box2d引擎之元素
主要包括: 简单形状的物体,如矩形.圆.多边形 复杂的由多个形状组成的物体 结合点,如连接多个物体的旋转结合点 接触监听器 一.简单形状的物体 矩形 function createRectangula ...
- elasticsearch插件之一:bigdesk
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况,http连接数等. 可用项目git地址:https:// ...
- Pogo-Cow
题目大意: 给出直线上N个点的坐标和分数,任意选一个点出发,每次只能跳到另外一个点上并获得相应的分数,且每次跳的方向要相同,本次跳的距离不小于上次跳的距离. 求最大得分. N<=1000. ...
- 线程系列3---ThreadLocal类研究
2013-12-23 17:44:44 Java为线程安全提供了一些工具类,如ThreadLocal类,它代表一个线程局部变量,通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量的副 ...
- C++-多重继承的注意点
1, 钻石型多重继承如果不想要底部的类有重复的变量,则需要声明为virtual继承 class File{...}; class InputFile: virtual public File{..}; ...
- 1、ViewModel类的构建和INoyifyPropertyChanged的应用
public class SampleItem : INotifyPropertyChanged { public SampleItem() { } private string title; pub ...
- 如何对Linux的grub进行加密
一.加密 设置grub密码: 众所周知,通过编辑GRUB启动参数可以轻松的进入单用户模式从而修改root密码,这对于一台多用户的计算机或服务器来说,无疑增加了安全隐患.大家一定很像为自己的GRUB加一 ...