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 程序员写的,推 ...
随机推荐
- 修改linux 文件权限命令 chmod
[转载自:http://www.cnblogs.com/avril/archive/2010/03/23/1692809.html] Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以 ...
- FFT一周目开坑!
先来一段非递归! #include<bits/stdc++.h> using namespace std; #define N ((1<<18)+3) ); struct ve ...
- IoTimerInLineHook
#ifndef CXX_IOTIMERINLINEHOOK_H # include "IoTimerInlineHook.h" #endif ULONG32 SSDT_NtOpen ...
- Apache启用性能优化——启用Gzip,JS压缩
#Add deflate module for enable GZIP function LoadModule deflate_module modules/mod_deflate.so #A ...
- 戴文的Linux内核专题:03驱动程序
转自Linux中国 驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序.没有驱动程序,内核不知道如何与硬件沟通或者处理协议(内核实际上先发送指令给BIOS,然后BIOS传给硬件). Lin ...
- Dom事件初步了解
1.事件流 事件流可以分为两种:事件冒泡和事件捕获 1. 事件冒泡就是从目标元素一直冒泡到根元素html(IE和DOM浏览器都有) 2. 事件捕获就是从根元素到目标元素(DOM浏览器支持) 2.事件处 ...
- Git搭建团队开发环境操作演练
模拟创建远程git仓库 1.首先创建如下目录结构: /Users/hujh/Desktop/GitTest2/GitServer/weibo weibo是我们要创建的项目 2.切换目录 $ cd /U ...
- 系统的 host文件的作用
有些用户可能已经注意到,我们在上网时除了可使用常规的 http://www.xxx.com或http://www.xxx.com.cn等形式的网站域名之外,还可以使用类似于“202.106.184.2 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
最近在项目中发现如下异常: 六月 25, 2015 5:58:34 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet ...