虽然大学阶段曾经学过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编程感悟的更多相关文章

  1. Python编程感悟

    从今年起开始学习python,最开始是听得MIT的那门公开课,然后又看了一本入门的书籍.但是总是没有觉得python很好用.可能的原因现在想起来是:IDE始终找不到顺手的,另外R用得太舒服了- any ...

  2. 编程感悟-建立好代码sop

    1.最近学django和python,发现很多的函数记不住,这时候我百度了一下,发现记不住是程序员的正常情况, 这下心安理得多了,记好笔记和咱的sop吧,会很快. 社会是不是也这样,好多东西也记不住, ...

  3. java编程感悟01

    很多职位都要求有极强的编程能力,在学习编程的过程中可能很累,可能想有新认识,你可以将编程看做通关模式,以此鼓励自己不断的学习. jsp中注册时的验证码就需要javaSE的编程功底,如果这个会了,验证码 ...

  4. Python调用R编程——rpy2

    在Python调用R,最常见的方式是使用rpy2模块. 简介 模块 The package is made of several sub-packages or modules: rpy2.rinte ...

  5. java编程感悟02

    很多时候我们需要网上查阅他人的代码,如果代码比较长或者注释较少,阅读起来就会比较费劲,这时需要培养快速读懂应用他人的代码的能力. 实现图片的旋转功能: import java.awt.geom.Aff ...

  6. Go 协程编程感悟

    0.GPM模型 1.默认地, Go所有的goroutines只能在一个线程里跑 ,除非告诉Go我们允许同时最多使用多个核,或者主动让出CPU时间,使goroutine可以抢占式的执行 2.如果当前go ...

  7. Android传感器编程带实例

    看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推荐大家也看看.话不多说,还是言归正传吧. 一.前言 我很喜欢电脑,可是笔记本还是太大,笔记本电脑再小还是要 ...

  8. 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你

    方法(一)编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和梁 ...

  9. Android传感器编程带实例(转)

    源:http://www.cnblogs.com/xiaochao1234/p/3894751.html 看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推 ...

随机推荐

  1. AudioManager音频管理器控制手机音频实例

    import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import a ...

  2. The C10K problem

    原文链接:http://www.kegel.com/c10k.html It's time for web servers to handle ten thousand clients simulta ...

  3. Div层的展开与收缩的代码

    <html> <head> <title>div展开收缩代码</title> <style> * { margin:0; padding:0 ...

  4. 百度上传android包:应用名解析失败!

    manifest 里面<application增加android:label="@string/app_name"

  5. 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)

    package com.kkdiangame.UI.res; import java.io.ByteArrayOutputStream; import java.io.File; import jav ...

  6. 3.5电子书pc显示

    使用svgalib 下载地址:https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30svgalib_1.4.3.orig.tar.gzsvgal ...

  7. C++-Effective C++ Items

    Item2:尽量以const,enum,inline替换#define 原因:1, #define ASPECT_RATIO 1.63 编译错误时产生魔数,应以const double Aspect_ ...

  8. 有关嵌入式linux的注意点总结

    知识收集和个人学习过程遇到的问题. 仅供参考. 1.sudo apt-get update 一直无法更新 一,查看网络是否连接上 有几种网络连接方式.常用的两种有网桥网络(Bridged)和网络地址翻 ...

  9. opencv实现图片缩放

    源码 #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/img ...

  10. 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...